目录

程序运行报错

C2039 std缺少成员

找不到文件

导出图片问题

导出图片是全黑的

导出图片前后颠倒


程序运行报错

C2039 std缺少成员

应该是VS的标准没有修改成c++17,还是默认的c++14

修改路径为:项目->属性->配置属性->常规->C++语言标准->选择 IOS C++17标准

找不到文件

出现以下错误:

[ WARN:0@0.158] global C:\build\master_winpack-build-win64-vc14\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('../models/spot/hmap.jpg'): can't open/read file: check file path/integrity
OpenCV(4.5.5) Error: Assertion failed (!_src.empty()) in cv::cvtColor, file C:\build\master_winpack-build-win64-vc14\opencv\modules\imgproc\src\color.cpp, line 182

是main.cpp文件的模型路径的问题,以防万一可以改为绝对路径:

老师给的代码框架里的:

...std::string filename = "output.png";objl::Loader Loader;std::string obj_path = "../models/spot/";// Load .obj Filebool loadout = Loader.LoadFile("../models/spot/spot_triangulated_good.obj");
...

根据自己存的model路径修改就行:

...
std::string filename = "output.png";objl::Loader Loader;std::string obj_path = "D:/games101/Assignment3/Code/models/spot/";// Load .obj Filebool loadout = Loader.LoadFile("D:/games101/Assignment3/Code/models/spot/spot_triangulated_good.obj");
...

注意:直接复制文件夹路径会是 D:\games101\Assignment3\Code\models\spot

要把 “\” 改成 "/"

导出图片问题

导出图片是全黑的

问题大部分出在上面提到的文件路径问题,看看是不是文件路径有误,或者没有把\改成/

导出图片前后颠倒

如图:

问题出在main.cpp的变换矩阵:

先展示一下我在作业1和作业2中用到的同一个透视矩阵

Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio,float zNear, float zFar)
{Eigen::Matrix4f projection = Eigen::Matrix4f::Identity();//完全按照课程里的参数取值,这道题的相机就在(0,0,0),因此远近平面都是在z的负半轴,所以n和f的值应该为负float f, n, l, r, b, t, fov;fov = eye_fov / 180 * MY_PI;n = -zNear; //znear是正值f = zFar;t = tan(fov/2) * zNear;b = -t;r = t * aspect_ratio;l = -r;//透视->正交 perspective->orthographicEigen::Matrix4f pertoorth;pertoorth << n, 0, 0, 0,0, n, 0, 0,0, 0, n + f, -n*f,0, 0, 1, 0;//正交——移动Eigen::Matrix4f orth1;orth1 << 1, 0, 0, -(r + l) / 2,0, 1, 0, -(t + b) / 2,0, 0, 1, -(n + f) / 2,0, 0, 0, 1;//正交——缩放Eigen::Matrix4f orth2;orth2 << 2 / (r - l), 0, 0, 0,0, 2 / (t - b), 0, 0,0, 0, 2 / (n - f), 0,0, 0, 0, 1;projection = orth2*orth1 * pertoorth;//注意矩阵顺序,变换从右往左依次进行return projection;
}

这里认为zNear和zFar都是正值,而作业输入的也确实如此,是正值。为了符合课上老师讲的n和f是负值所以最开始令n=-zNear,f=-zFar,但得到的牛牛前后颠倒了。

阅读了这一篇文章后:《GAMES101》作业框架问题详解 - 知乎 (zhihu.com)

终于明白为什么会前后颠倒!!问题出在z-buffer上面: “在讨论z-buffer时,要将z值换一个概念:z值越小离摄像机越近,z值越大离摄像机越远”。我在之前的写的GAMES101作业1-VS2019中也有提到,zNear和zFar这个概念是在OpenGL中找到的有具体的定义(具体是不是我也不确定)。​​​​​因此推测作业3代码框架应该是参考OpenGL的。

既然z-buffer的z轴变成了z正方向,在之前的基础上加上一个将z轴旋转180°的矩阵就好!完整代码如下:

Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio, float zNear, float zFar)
{// TODO: Copy-paste your implementation from the previous assignment.Eigen::Matrix4f projection;float f, n, l, r, b, t, fov;fov = eye_fov / 180 * MY_PI;n = -zNear; //znear是正值f = -zFar;t = tan(fov / 2) * zNear;b = -t;r = t * aspect_ratio;l = -r;//透视->正交 perspective->orthographicEigen::Matrix4f pertoorth;pertoorth << n, 0, 0, 0,0, n, 0, 0,0, 0, n + f, -n * f,0, 0, 1, 0;//正交——移动Eigen::Matrix4f orth1;orth1 <<1, 0, 0, -(r + l) / 2,0, 1, 0, -(t + b) / 2,0, 0, 1, -(n + f) / 2,0, 0, 0, 1;//正交——缩放Eigen::Matrix4f orth2;orth2 <<2 / (r - l), 0, 0, 0,0, 2 / (t - b), 0, 0,0, 0, 2 / (n - f), 0,0, 0, 0, 1;//确保图象是正的,要对z轴进行反转Eigen::Matrix4f mirror;mirror <<1, 0, 0, 0,0, 1, 0, 0,0, 0, -1, 0,0, 0, 0, 1;projection = mirror*orth2 * orth1 * pertoorth;//注意矩阵顺序,变换从右往左依次进行return projection;
}

修改后牛牛就正过来啦!

GAMES101作业3-遇到的各种问题及解决方法相关推荐

  1. GAMES101作业6及课程总结(重点解决SAH扩展作业)

    这次作业相对于作业5会麻烦一点点,而且框架相较于作业五的也麻烦了一点,当然作业的难点其实主要还是在扩展作业SAH那块. 目录 课程总结与理解(光线追踪) 框架梳理 作业一:光线生成 作业二:光线-三角 ...

  2. games101 作业4

    games101 作业4 任务说明 Bézier 曲线是一种用于计算机图形学的参数曲线.在本次作业中,你需要实现 de Casteljau 算法来绘制由 4 个控制点表示的 Bézier 曲线 (当你 ...

  3. GAMES101作业5-从头到尾理解代码Whitted光线追踪

    目录 Whitted Ray-Tracing Whitted光线追踪 What Why How 1 发射主射线primary ray 实现步骤 (1)定义相机 (2)计算primary主射线的方向 R ...

  4. GAMES101作业7提高-实现微表面模型你需要了解的知识

    目录 微表面材质模型 微平面理论 Microfacet Theory BSDF(浅浅的提一下) 微表面BRDF的实现 Cook-Torrance BRDF 漫反射的BRDF 镜面反射的BRDF 1 法 ...

  5. GAMES101作业7-路径追踪实现过程代码框架超全解读

    目录 Path Tracing算法过程讨论 蒙特卡洛积分 直接光照 direct illumination 间接光照 indirect illumination ​编辑 合成全局光照 解决一些存在的问 ...

  6. 计算机图形学学习笔记——Whitted-Style Ray Tracing(GAMES101作业5讲解)

    计算机图形学学习笔记--Whitted-Style Ray Tracing GAMES101作业5讲解 遍历所有的像素生成光线 光线与平面求交 遍历所有的像素生成光线 关于作业五中如何遍历所有的像素, ...

  7. GAMES101作业7及课程总结(重点实现多线程加速,微表面模型材质)

    目录 闲言碎语 最终全部效果展示(均为1024×1024×512ssp) 课程总结与理解(Path Tracing) 框架梳理 任务一:迁移相关代码 任务二:实现path tracing 任务三:多线 ...

  8. GAMES101作业6-BVH完成全过程

    目录 作业要求 Render.cpp TODO:需要的补充内容 Triangle.hpp 框架 Ray.hpp -> struct Ray Intersection.hpp -> stru ...

  9. 互动作业显示服务器异常,互动作业打不开怎么办 互动作业打不开解决方法

    互动作业打不开怎么办?互动作业打不开解决方法.互动作业就是一款帮助学生提高学习成绩的软件,最近有伙伴反映互动作业打不开用不了,那么互动作业打不开怎么办呢?一起来看看解决方法吧! 互动作业打不开解决方法 ...

最新文章

  1. hihoCoder#1384 : Genius ACM
  2. 快速设置UITableView不同section对应于不同种类的cell
  3. spring boot application.properties 属性详解
  4. Cygwin使用指南
  5. mysql目录树_无限级目录树+记忆节点状态(PHP+mysql)
  6. 【无线电波】蓝牙Bluetooth来源 原理?有无辐射影响健康 是否安全!?
  7. ocid oracle,Oracle数据库基础:新手推荐
  8. jQuery UI dialog插件出错信息:$(this).dialog is not a function
  9. mysql导出数据dump_MYSQL使用mysqldump导出表的部分数据
  10. 【C/C++】字符串类型
  11. java删除文件,重命名文件
  12. object-c的静态变量(static)
  13. SCHMIDT SS 20.260 506690传感器ALRE JTF-1/12湿度检测器
  14. graphlan/iTOL画进化树记录
  15. centOS7下安装配置nagios
  16. 【京东笔试题】熊猫吃竹子,回溯
  17. ASP中Split分割字符串函数的实例用法
  18. matlab画基因表达热图,科学网—使用pheatmap软件绘制基因表达热图 - 陈振玺的博文...
  19. JAVA(一)依赖注入的简单理解
  20. java实现下载网络图片到本地

热门文章

  1. 三端口dcdc变换器方案,原理图及题目分析。 有整体方案。有MATLAB仿真验证
  2. GIMP学习_菜单03:选择菜单
  3. 深入剖析!什么是Redis缓存雪崩、缓存穿透和缓存击穿?内容太过真实
  4. 出纳通如何重新年结?
  5. 2022年二级建造师施工进度计划的编制方法模拟题及答案
  6. centos 开机运行卡住
  7. 【Linux】Linux最常用的20个基本指令 介绍~分析
  8. 员工培训Employee Training
  9. 由火车站戴口罩人脸识别入站感想
  10. 面试官最爱问的问题背后真相