MinusculeRender/src/minus_renderer.h

42 lines
1.1 KiB
C
Raw Normal View History

2024-03-22 20:12:09 +08:00
// Copyright 2024 SquareBlock Inc. All Rights Reserved.
// Author: tianlei.richard@qq.com (tianlei.richard)
#pragma once
#include "mesh.h"
#include "util/math_util.h"
#include <opencv2/core/core.hpp>
class MinusRenderer {
public:
MinusRenderer(float near, float far, float fov, float aspect_ratio);
public:
2024-03-27 18:31:10 +08:00
void set_meshes(const std::vector<Mesh> &meshes);
cv::Mat render(const int resolution_width, const int resolution_height);
public:
void model_transform(const TransformMatrix &mtx);
void view_transform(const TransformMatrix &mtx);
private:
2024-03-06 22:23:48 +08:00
static float calculate_height(const float fov, const float near);
static float calculate_width(const float height, const float ratio);
2024-03-22 20:12:09 +08:00
static std::tuple<double, double, double>
2024-03-29 18:09:16 +08:00
calculate_barycentric_coordinate(const Triangle &t, const Point3d &p);
2024-03-06 22:23:48 +08:00
private:
std::pair<TransformMatrix, TransformMatrix>
construct_transform(const int resolution_width,
const int resolution_height) const;
private:
float near_;
float far_;
float fov_; // In radian
float aspect_ratio_;
std::vector<Mesh> meshes_;
};