// Copyright 2024 Bytedance Inc. All Rights Reserved. // Author: tianlei.richard@bytedance.com (tianlei.richard) #pragma once #include "triangle.h" #include class MinusRenderer { public: MinusRenderer(float near, float far, float fov, float aspect_ratio, std::vector &&primitives); public: cv::Mat render(const int resolution_width, const int resolution_height); public: void model_transform(const TransformMatrix &m); private: static float calculate_height(const float fov, const float near); static float calculate_width(const float height, const float ratio); static TransformMatrix view_port_transform(const float width, const float height); private: TransformMatrix squish_tranform(); TransformMatrix orthographic_tranform(); private: float near_; float far_; float fov_; // In radian float aspect_ratio_; float height_; float width_; std::vector primitives_; };