Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 作业5关于Render函数最后乘以scale的疑惑

  • This topic has 6 replies, 2 voices, and was last updated 4 years ago by YY.
Viewing 2 reply threads
  • Author
    Posts
    • #4802 Score: 0
      YY
      Participant
      1 pt

      在计算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.
    • #4806 Score: 0
      Angus
      Participant
      23 pts

      scale(tan(fov/2))是用来确定film的height的,你不用它如何确定height呢?

      • #4816 Score: 0
        YY
        Participant
        1 pt

        hight不是scene.hight吗

        • #4817 Score: 0
          Angus
          Participant
          23 pts

          那个height=700是最后结果图片的height=700。你想在世界坐标系下用1.0的高度来映射这个700呢,还是用2.0个高度来映射,靠的是这个scale。

          • #4829 Score: 0
            YY
            Participant
            1 pt

            很感谢你的耐心解答,但是我还是不太理解这个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.
    • #4832 Score: 2
      Angus
      Participant
      23 pts
      • #4942 Score: 0
        YY
        Participant
        1 pt

        这两天刚刚比较忙,刚看见,感谢你分享的资料。我发现我的实现方法跟这篇文章不一样,它是将场景映射到(0,1)×(0,1)的NDC space,在映射到(-1,1)×(-1,1)的screen space,最后在进行视角和长宽的缩放。而我的做法是直接计算长宽比缩放之前的(x,y),我在计算公式中找到了scale这一项,也就是我已经乘过了。代码框架中的注释应该是基于你分享的这篇资料的方法,十分感谢,我弄明白了。

Viewing 2 reply threads
  • You must be logged in to reply to this topic.