Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › Hw2的疑问
Tagged: triangle order
- This topic has 15 replies, 7 voices, and was last updated 4 years, 5 months ago by 不要熬夜.
-
AuthorPosts
-
-
-
这个关于原点对称的问题我向闫老师咨询过,是因为当时编写这个代码框架的时候使用的是左手系而导致的,所以颠倒的结果没关系,也算对的。
另外,在进行过投影之后z的取值范围变为[-1,1],在rasterizer.cpp的83行的vert.z() = vert.z() * f1 + f2将z的值放大且均变为正数。-
助教好,我想请教您一下,这里vert.z() = vert.z() * f1 + f2,应该是对z进行了缩放和平移,请问一下翻转的代码在哪里表示呢?就是使得z越大,深度越深的反转。谢谢啦!
-
+1
我也好奇哪一部分代码涉及了z轴的反转 -
不好意思,检查代码的时候没有注意,应该改为vert.z() = -vert.z() * f1 + f2,或者初始化z-buffer时初始成-infinite。
-
好的好的,谢谢啦~辛苦了!
-
-
-
BubbleInPitParticipant
助教你好,我有一个疑问,给的两个三角形的z值分别为-5和-2,-5离原点更远,也应当被z值为-2的三角形盖住。在我的代码里,-5经过正交投影后变为-0.983968,-2经过正交投影后变为-0.975379,当这两个值经过vert.z() = vert.z() * f1 + f2的变换,会导致-5对应的z值比-2对应的z值要小,也就是说,此时-5对应的这个三角形离原点更近了,而它本应该更远。请问这是我的正交投影计算出错吗?
-
你计算的没错,是我们检查框架时没有注意。应该把rasterizer.cpp第83行的vert.z() = vert.z() * f1 + f2改为vert.z() = -vert.z() * f1 + f2
This post has received 2 votes up.-
BubbleInPitParticipant
好的,感谢回复。已修改。
(上面的“正交投影”应该改成“透视投影”😂) -
助教,-5经过透视投影后变为-0.983968,-2经过透视投影后变为-0.975379,他的计算是正确对吗?为什么我的透视投影后直接变成了正数。。。。
-
不好意思,我之前也没有仔细算,我只是看了他的大小关系是正确的,即-5变换后的z值更小。
- This reply was modified 4 years, 9 months ago by Shi YuChen(助教).
- This reply was modified 4 years, 9 months ago by Shi YuChen(助教).
-
-
为什么要把vert.z() = vert.z() * f1 + f2改为vert.z() = -vert.z() * f1 + f2??
我透视投影、归一化、然后缩放以后,三角形的z值变换分别是
-2—>6.8—>0.97—>49.3
-5—>9.8—>0.98—>49.6我觉得不需要改变代码啊。
而且我认为经过透视投影以后,z值是正值才是正确的。三角形在-z的空间内,摄像机在+z的位置,又因为裁剪空间是左手系,也就是三角形经过mvp变换以后,变换到了裁剪空间下,z值就应该是正值啊。
(如下图,不知道我的理解是否正确)Attachments:
You must be logged in to view attached files.-
你说的是没错的,主要原因是代码框架中的坐标系是左手系,导致如果纯粹按着闫老师上课所讲的右手系推到过程来构造透视投影矩阵的话,得到的结果是负值。
-
好滴,谢谢助教
-
-
不要熬夜Participant
为什么我的是改为-vert.z() * f1 + f2之后的z值变化跟你一致呢?
-
-
-
-
-
-
AuthorPosts
- You must be logged in to reply to this topic.