Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 作业2关于z坐标插值的疑问 This topic has 7 replies, 3 voices, and was last updated 4 years, 4 months ago by Panneiria. Viewing 3 reply threads Author Posts 2020年7月28日 at 下午3:17 #6835 Score: 0 PanneiriaParticipant Karma: 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. 2020年7月28日 at 下午4:34 #6837 Score: 0 K.G.LeeParticipant 知道了嘛???分享一下,嘿嘿 2020年7月28日 at 下午7:22 #6838 Score: 0 nuomiParticipant w_reciprocal求得的是点在view space的z坐标,这个公式是推导出来的 z_interpolated是zbuffer中depth,所以要除以w这个齐次坐标系数(举个例子(1,1,1,1)和(w,w,w,w)其实是一个点) 因为透视投影中是介于zNear和zFar的,所以最后插值得到的z_interpolated要乘以w_reciprocal 2020年7月28日 at 下午9:23 #6839 Score: 0 PanneiriaParticipant Karma: 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吗?为什么代码里用的是除法?能麻烦大佬再讲解一下吗,或者有在哪里看到解释发下链接也好。 2020年7月28日 at 下午11:46 #6841 Score: 0 nuomiParticipant https://zhuanlan.zhihu.com/p/45757899 在3D光栅化这里有公式推导 2020年7月29日 at 下午12:53 #6844 Score: 0 PanneiriaParticipant Karma: 2 pts 我明白我迷在哪儿了,多谢大佬指点 2020年7月28日 at 下午9:34 #6840 Score: 0 PanneiriaParticipant Karma: 2 pts 还有最关键的,我们要在zbuffer里储存的是哪个状态下(哪个变换后)的z值? 2020年7月29日 at 上午12:08 #6843 Score: 0 nuomiParticipant ViewSpace 可以回顾一下projection tranformation这部分 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