0

我刚刚阅读了 www.songho.ca 上的一篇文章,其中指出投影矩阵由以下内容定义:

[2n/(r-l) 0        (r+l)/(r-l)  0            ]
[0        2n/(t-b) (t+b)/(t-b)  0            ]
[0        0        -(f+n)/(f-n) -2*n*f/(f-n) ]
[0        0        -1           0            ]

在哪里:

n: near
f: far
l: left
r: right
t: top
b: bottom

我还在www.geeks3d.com上阅读了由以下给出的替代定义:

[w 0 0  0]
[0 h 0  0]
[0 0 q -1]
[0 0 qn 0]

在哪里:

w=(2*near)/(width * aspect)
h = 2near/height
q=-(far+near)/(far-near)
qn=-2*(far*near) / (far-near)

M[0][2]为什么和M[1][2](不包括一个是另一个的转置)有差异?它们产生相同的结果吗?哪一个可以在没有任何转置的情况下在 GLSL 中使用?

4

1 回答 1

1

第一个矩阵允许您任意定位左侧、右侧、顶部和底部剪辑平面位置。第二个总是给你一个居中的、对称的平截头体,这是一种限制。例如,当您进行立体渲染时,您希望稍微移动左右平面。

顺便说一句,哪一个可以在没有任何转置的情况下在 GLSL 中使用?

这与 GLSL 无关。你可以使用任何一个。您所指的转置源于 OpenGL 内部表示矩阵的方式以及与外部世界的接口。

无论如何,您不应该将矩阵硬编码到着色器源代码中,而是通过Uniform提供它们。

更新

OpenGL对其矩阵列进行排序,即

0 4 8 c
1 5 9 d
2 6 a e
3 7 b f
于 2012-06-18T07:52:00.607 回答