首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >透视投影:证明1/z是线性的?

透视投影:证明1/z是线性的?
EN

Stack Overflow用户
提问于 2015-02-24 22:26:34
回答 1查看 601关注 0票数 7

在三维渲染(或几何学)中,在栅格化算法中,当你将三角形的顶点投影到屏幕上,然后发现一个像素是否与2D三角形重叠时,你通常需要找到像素重叠的三角形的深度或z坐标。一般情况下,该方法包括计算三角形二维投影图像中像素的重心坐标,然后利用这些坐标插值三角形原始顶点z-坐标(在顶点得到投影之前)。

现在,在所有的教科书中都写着,您不能直接插值顶点的顶点坐标,但是您需要这样做:

(对不起,拉泰克斯不能上班了?)

1/z = w0 * 1/v0.z + w1 * 1/v1.z + w2 * 1/v2.z

其中w0、w1和w2是三角形上“像素”的重心坐标。

现在,我所关心的有两件事:

  • 用什么形式证明插值z不起作用?
  • 证明1/z做正确事情的正式证据是什么?

为了证明这不是在家工作;-)而且我自己做了一些工作,我找到了关于问题2的以下解释。

基本上,三角形可以用平面方程来定义。这样你就可以写:

Ax + By + Cz = D.

然后分离z,得到z= (D By)/C

然后,将这个公式除以z,就像用透视除法一样,如果您开发、重新组合等等,就会得到:

1/z = C/D + A/D_x/z + B/D_y/z。

然后我们将C'=C/D、B'=B/D和A'=A/D命名为:

1/z = A'x/z + B'y/z + C‘

它说x/z和y/z只是屏幕上三角形点的坐标,右边的方程是“仿射”函数,因此1/z是线性函数?

在我看来这不像是个示范?或者这也许是正确的想法,但不能真正说,你可以通过看方程来判断这是一个仿射函数。如果你把你刚刚得到的所有术语乘以:

A'x + B'y + C'z = 1。

这基本上是我们的原始方程(只需要用适当的术语替换A‘B’和C‘)。

EN

回答 1

Stack Overflow用户

发布于 2015-06-04 21:20:55

不知道你想问什么,但如果你看看:

代码语言:javascript
复制
1/z = A'x/z + B'y/z + C'

并将其改写为:

代码语言:javascript
复制
1/z = A'u + B'v + C'

(u,v)是透视投影后三角形的屏幕坐标时,你可以看到三角形上一个点的深度(z)与(u,v)不是线性相关的,而是1/depth是的,这就是教科书试图教你的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28707584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档