Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 作业2关于z坐标插值的疑问

Viewing 3 reply threads
  • Author
    Posts
    • #6835 Score: 0
      Panneiria
      Participant
      2 pts

      想请教以下各位大佬,作业框架中的那段计算z插值的代码到底在干嘛。
      假定三角形ABC三个顶点对应的z值分别是z1,z2,z3,那在不考虑齐次坐标的情况下,其中任意一点的z坐标就应该是alpha*z1+beta*z2+gamma*z3。如果我没有理解错的话,在齐次坐标中,这个点的z坐标应该是z_interpolated=alpha*z1_homogeneous+beta*z2_homogeneous+gamma*z3_homogeneous, w坐标应该是w_interpolated=alpha*w1+beta*w2+gamma*w3, 然后转换回3维空间,z坐标就应该是z_interpolated/w_interpolated.
      所以我就不是太明白代码里的w_reciprocal和z_interpolated。感觉w_reciprocal好像是我说的w_interpolated的倒数但是代码里是除法,然后z_interpolated里面已经在各个z值上除以了w,就是已经转换回3维空间了,但是最后又乘了w_reciprocal。请大佬们讲解一下这段代码到底是什么原理。

      Attachments:
      You must be logged in to view attached files.
    • #6837 Score: 0
      K.G.Lee
      Participant

      知道了嘛???分享一下,嘿嘿

    • #6838 Score: 0
      nuomi
      Participant

      w_reciprocal求得的是点在view space的z坐标,这个公式是推导出来的
      z_interpolated是zbuffer中depth,所以要除以w这个齐次坐标系数(举个例子(1,1,1,1)和(w,w,w,w)其实是一个点)
      因为透视投影中是介于zNear和zFar的,所以最后插值得到的z_interpolated要乘以w_reciprocal

      • #6839 Score: 0
        Panneiria
        Participant
        2 pts

        我又结合作业3的代码琢磨了一下(好像2里面有点小问题,w是不对的),传入rasterize_triangle这个方法的三角形中代表顶点的向量的x,y是viewspace中的坐标(像素),z是原本已经转化成canonical cube中的坐标又乘上了f1再加上f2,也就是变回了我们刚把frustum挤扁但还没有变到canonical cube时候的z坐标,w是已经完成了model和view变换时候,也就是view space中的z坐标。那z其实已经是实际的坐标了(而不是在齐次坐标中受到其次坐标系数影响的值),为什么还要除以w?而且如果要插值计算点在view space中的z坐标,难道不应该是alpha*w1+beta*w2+gamma*w3吗?为什么代码里用的是除法?能麻烦大佬再讲解一下吗,或者有在哪里看到解释发下链接也好。

    • #6840 Score: 0
      Panneiria
      Participant
      2 pts

      还有最关键的,我们要在zbuffer里储存的是哪个状态下(哪个变换后)的z值?

      • #6843 Score: 0
        nuomi
        Participant

        ViewSpace
        可以回顾一下projection tranformation这部分

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