Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 关于作业二判断点在三角形内的问题

Tagged: 

Viewing 2 reply threads
  • Author
    Posts
    • #9357 Score: 0
      MegaDNA
      Participant

      可能是自己没认真听,在写作业二的时候产生了几个问题:
      1、在判断点在三角形内的时候一般用的叉乘方法a.cross(b),需要这两个向量都是三维的,但是屏幕像素的坐标的二维的。看到论坛里有同学说可以直接把屏幕像素的Z值设置为0,所以我们成像屏幕的位置就是XOY(z==0)平面是吗?
      2、这样的话那我们定义的近平面zNear又是什么意思呢?听课上说的是给定一个FOV和宽高比加上zNear就能确定一片视野区域,那这个视区是不是屏幕范围呢,是的话那屏幕像素坐标的Z值是不是要设置成z==zNear?还是说最后这个视区也会投影到XOY平面上?
      3、最后一个问题(基于成像屏幕在XOY上),我看论坛里有同学计算三角形边向量的时候是直接用两个顶点相减的,这里在作业二还好,因为三个点的Z值相同,但是万一这个三角形是一个有深度的三角形,三个点的Z值都不同,那这样直接相减后的得到的向量其z值就不等于0,向量就不在屏幕(XOY平面)内了,这样也可以直接与屏幕内的点做叉乘进行判断吗?是不是需要统一把顶点坐标的z值设置为0呢?
      疑惑比较多,希望有人解惑,谢谢大家!

    • #9366 Score: 0
      yazj
      Participant

      1 向量叉乘需要向量都是三维是因为他们叉乘的结果在 z 方向是有值的,而且eigen库只支持三维向量的叉乘运算。把两个参数的z值设置为0不代表成像屏幕的位置,因为我们只关心叉乘运算得到的结果的z值正负

      2 你可能把之前课程的内容和这次的搞混了, FOV、zNear、zFar和宽高比是为了确定投影变换,也就是确定函数get_projection_matrix()

      3 同1,在判断点是否在三角形内中将z设置成0仅仅是为了方便判断结果的正负,与深度测试无关。这里判断点是否在三角形内涉及的是光栅化的课程内容,是为了判断这个像素需不需要被渲染,而正因为这样无法进行深度测试才另外引入了depth_buf

      希望可以对你有所帮助

      • #9381 Score: 0
        MegaDNA
        Participant

        好的,谢谢,大致了解了!
        那还有一个问题,就是我们的成像平面一般在什么位置呢,是在相机所在的XOY平面内吗?

    • #9389 Score: 0
      yazj
      Participant

      参考课件4的第20页和课件5的第五页可以知道,zNear平面大概就是我们的成像平面。

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