这样的投影矩阵存在吗?

问题描述 投票:0回答:1

我正在寻找一个在x方向有透视投影,在y方向有正交投影的投影矩阵,如图所示,这个存在吗?

我尝试这样做,但没有成功,而且看起来很奇怪。

gl_Position = projection * view * vec4(pos, 1.0);
gl_Position.z = (view * vec4(pos, 1.0)).y;

Here is projection looks like

opengl-es glsl opengl-es-2.0
1个回答
0
投票

由于透视投影的工作方式,您想要做的事情无法完全在一个矩阵中完成,并且需要额外的步骤。

此链接解释了在顶点着色器中处理顶点后会发生什么,问题的相关部分是透视划分。顶点着色器的输出是一个 4 维向量,其中齐次 (w) 分量用于所有其他三个分量(x、y 和 z)的透视划分。

通常,为了使这种齐次除法适用于透视投影,投影矩阵看起来有点像这样:

|  a  0  b  0 |
|  0  c  d  0 |
|  0  0  e  f |
|  0  0 -1  0 |

请注意,w 分量设置为(变换后的)模型坐标的(负)z 分量。因此,顶点后处理中的后续同质划分将执行透视划分。

话虽这么说,为了混合透视和正交投影以产生一些极端的变形投影,您基本上会遵循@user253751的建议并使用:

  • 投影矩阵第 1、3 和 4 行的透视投影条目
  • 第 2 行的拼字法划分的条目 投影矩阵

在顶点着色器中执行乘法之后,您可以将

gl_Position
中结果值的 y 分量与其 w 分量相乘,然后将其传递到后处理阶段。

这有效地恢复了后处理阶段仅对 y 坐标进行齐次分割的操作,将其转换为 y 分量的正交投影。

© www.soinside.com 2019 - 2024. All rights reserved.