目录
题目概要
完善代码
绕Z轴变换矩阵
构建透视矩阵
先展示完成的代码
参数理解
运行结果
过程中出现一次报错
提高作业
提高作业代码
将代码运用于图像
main.cpp完整代码
rasterizer.hpp完整代码
rasterizer.cpp完整代码
题目概要我用的是VS2019完成的作业,所以要先手动添加Eigen和opencv库,分别把源文件和头文件加进去就行。
如果可以成功运行,什么都不修改的情况下得到的是一个直线:
Eigen::Matrix4f get_model_matrix(float rotation_angle)
{
Eigen::Matrix4f model = Eigen::Matrix4f::Identity();
Eigen::Matrix4f rot; //构建旋转矩阵
float angle = rotation_angle / 180 * M_PI;
rot 正交 perspective->orthographic
Eigen::Matrix4f pertoorth;
pertoorth {2, 0, -2}, {0, 2, -2}, {-2, 0, -2}};
std::vector{0, 1, 2}};
auto pos_id = r.load_positions(pos);
auto ind_id = r.load_indices(ind);
int key = 0;
int frame_count = 0;
if (command_line) {
r.clear(rst::Buffers::Color | rst::Buffers::Depth);
r.set_model(get_model_matrix(angle));
r.set_view(get_view_matrix(eye_pos));
r.set_projection(get_projection_matrix(45, 1, 0.1, 50));
r.set_rodrigues(get_rotation(raxis, rangle));
r.draw(pos_id, ind_id, rst::Primitive::Triangle);
cv::Mat image(700, 700, CV_32FC3, r.frame_buffer().data());
image.convertTo(image, CV_8UC3, 1.0f);
cv::imwrite(filename, image);
return 0;
}
bool rflag = false;
std::cout
关注
打赏
立即登录/注册


微信扫码登录