Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 作业3 为什么Phong Shader里要用eyepos减去point This topic has 4 replies, 4 voices, and was last updated 3 years, 9 months ago by jason411. Viewing 3 reply threads Author Posts 2020年4月29日 at 上午9:16 #6261 Score: 0 WFanParticipant 翻了下之前的帖子,发现很多人都是写的v=eye_pos-position,这么做得出来的结果如图2,和给的例子一样。但是我觉得应该直接让v=-position就行了,这么做得出来如图3,可以看到高光处有些区别。 理由是,传给Phong Shader的点是乘过view矩阵的(源码也确实是这样,如图1),所以point的坐标已经是以eye为原点的坐标,光源的坐标也应该是相对于eye的坐标。这样的话计算v的时候就不需要考虑eye的坐标了呀。求各位解答,不知道是不是我的理解有问题。 Attachments:You must be logged in to view attached files. 2020年4月30日 at 上午1:09 #6288 Score: 0 ManiacWongParticipant 最近几天才发现这套课程,想回来重新巩固下知识点,还没仔细看代码。 首先向量eye_pos-position的意义是这个顶点Vertex到eye的向量,如果是-position,那就成原点到顶点的向量了。 乘以view矩阵是让顶点进入了view space,那么顶点现在对应的原点的确是eye的位置,如果是这样的话,那其实是不正确的。 一般写Specular代码的时候在Vertex Shader会保留一个World Position,用顶点POS乘以world matrix,和经过world view projection变换的顶点有所区别。 然后PosW传到Pixel Shader后再用这个PosW计算 2020年4月30日 at 上午8:27 #6289 Score: 0 WFanParticipant 我觉得应该是这样的,所以作业3里要么传到shader里的点不要乘view矩阵(这样合理,因为光照坐标是全局的了,不用随着eye的移动更改),要么就把所有的坐标看作是相对于原点的坐标,不要考虑eye的位置。有说错的地方欢迎指正,希望老师或者助教能看到。 2021年2月17日 at 下午10:51 #7676 Score: 0 DanteParticipant 是呀,感觉应该是框架代码写错了,有人解答一下吗? 2021年3月1日 at 下午6:14 #7750 Score: 0 jason411Participant 同求解答。猜测本意是eye就等价于camera,可以从main.cpp里面印证,构造view矩阵传入的eye_pos和fragment_shader里面写死的eye_pos取值是一样的。但是传入shader的是相机空间的坐标不是世界坐标,那么eye的位置就是原点。 Author Posts Viewing 3 reply threads You must be logged in to reply to this topic. Log In Username: Password: Keep me signed in Log In