如何构造y轴正交x轴透视的投影矩阵

How to construct projection matrix with ortho-ish in y-axis and perspective in x-axis

我将如何创建一个映射坐标的矩阵:

近平面

x: [-3,3] -> [-1,1]
y: [-6,2] -> [-1,1]
z: 2 -> -1

远位面

x: [-4,4] -> [-1,1]
y: [-4,4] -> [-1,1]
z: 0 -> 1

我可以在具有特殊功能的顶点着色器中完成,但如果可能的话,我想使用投影矩阵来完成。

vec4 special_projection(vec4 p){
  float ty = 0.25 * p.z;
  float tx = 0.25 * p.x;
  float xz = (tx / 3.0) * (p.z / 2.0);
  float x = tx + xz;
  float y = 0.25 * p.y + ty;
  float z = -0.5 * p.z;
  return vec4(x,y,z,1);
}

你想要的是在你工作的 4d 齐次 space 中不能用矩阵乘法表示。

要获得正确的透视划分,您需要将 w_clip 设置为 z_eye 的某个线性函数。标准的 GL 约定是 w_clip = -z_eye,我将在这里使用它。要获得没有透视变形的 y,您需要将 y_clip 乘以 w_clip = - z_eye

您当然可以将任何公式写入您喜欢的着色器,但请注意,按照您打算的方式扭曲 space,插值的透视校正将产生您可能不会产生的结果期待。