Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 作业5关于Render函数最后乘以scale的疑惑 This topic has 6 replies, 2 voices, and was last updated 4 years, 7 months ago by YY. Viewing 2 reply threads Author Posts 2020年3月26日 at 下午10:30 #4802 Score: 0 YYParticipant Karma: 2 pts 在计算dir=(x,y,-1)的时候,用imageAspectRatio将原来的举行变成正方形,然后再投影,否则不能将一个矩形满屏投影到一个正方形上,所以最后x要乘imageAspectRatio恢复成矩形。但是为什么x和y要乘scale呢?scale只是反应视野的范围,只要控制距离就可完成投影,也就是用来确定物体到视野点的距离|n|的。乘以scale的不就相当于进行了二次缩放了,有点理解不了。 因为原来的fov = 90°,sacle=1,所以没用影响,我试了试fov =-90° 的情况,相当于视角上下颠倒,但是按照乘以scale的情况计算,最后结果不变,如果按照不乘scale,得到的是上下颠倒的。感觉这个地方可能有问题。 Attachments:You must be logged in to view attached files. 2020年3月26日 at 下午10:47 #4806 Score: 0 AngusParticipant Karma: 23 pts scale(tan(fov/2))是用来确定film的height的,你不用它如何确定height呢? 2020年3月27日 at 上午10:21 #4816 Score: 0 YYParticipant Karma: 2 pts hight不是scene.hight吗 2020年3月27日 at 上午10:49 #4817 Score: 0 AngusParticipant Karma: 23 pts 那个height=700是最后结果图片的height=700。你想在世界坐标系下用1.0的高度来映射这个700呢,还是用2.0个高度来映射,靠的是这个scale。 2020年3月27日 at 下午7:11 #4829 Score: 0 YYParticipant Karma: 2 pts 很感谢你的耐心解答,但是我还是不太理解这个1.0和2.0。 对最终的x乘imageAspectRatio,使得原本到A点的射线像到了B点。(第一幅图) 然后我现在对最终的y乘scale,假设scale大于1,射线由A到了B点。(第二幅图),这样的话射线覆盖区域大于原本的1280*960,多余的部分就与原来场景无关,而都是背景色,最终显示在1280*960的图像里,相当于把原图缩小了。 不知道我的理解是不是有问题。 Attachments:You must be logged in to view attached files. 2020年3月27日 at 下午8:03 #4832 Score: 2 AngusParticipant Karma: 23 pts https://www.scratchapixel.com/lessons/3d-basic-rendering/ray-tracing-generating-camera-rays/generating-camera-rays 这个讲的清楚 This post has received 2 votes up. 2020年3月30日 at 下午1:02 #4942 Score: 0 YYParticipant Karma: 2 pts 这两天刚刚比较忙,刚看见,感谢你分享的资料。我发现我的实现方法跟这篇文章不一样,它是将场景映射到(0,1)×(0,1)的NDC space,在映射到(-1,1)×(-1,1)的screen space,最后在进行视角和长宽的缩放。而我的做法是直接计算长宽比缩放之前的(x,y),我在计算公式中找到了scale这一项,也就是我已经乘过了。代码框架中的注释应该是基于你分享的这篇资料的方法,十分感谢,我弄明白了。 Author Posts Viewing 2 reply threads You must be logged in to reply to this topic. Log In Username: Password: Keep me signed in Log In