【发布时间】:2014-02-05 19:43:57
【问题描述】:
我正在尝试在光空间中为我的场景建模,作为我的阴影贴图的准备,但是我非常困惑。
在我的着色器中计算位置的行:gl_Position = light_projection_matrix * light_view_matrix * light_model_matrix * position;,其中位置是由 3 个浮点数给出的模型坐标(在我的情况下等于世界坐标),我将其读取为vec4,这部分已经证明工作。
现在我将以下用 Java 编码的代码用于我的矩阵:
lightModelMatrix.identity().multiply(modelMatrix);
lightViewMatrix.identity().lookAt(new Vector3f(-20f, 7.5f, -20f), Vector3f.O, Vector3f.Y);
lightProjectionMatrix.identity().frustum(-1f, 1f, -1f, 1f, -200f, 200f);
modelMatrix 是 identity()
我认为问题在于lookAt 矩阵正在改变我的向量的.w 分量,我不确定这是否应该发生,我只知道投影矩阵必须 计算一个.w 组件。
这是我lookAt的代码:
public Matrix4f lookAt(final Vector3f eye, final Vector3f at, final Vector3f up) {
Vector3f zAxis = at.subtract(eye).normalized();
Vector3f xAxis = up.cross(zAxis).normalized();
Vector3f yAxis = zAxis.cross(xAxis);
return multiply(
xAxis.getX(), xAxis.getY(), xAxis.getZ(), -xAxis.dot(eye), //X column
yAxis.getX(), yAxis.getY(), yAxis.getZ(), -yAxis.dot(eye), //Y column
zAxis.getX(), zAxis.getY(), zAxis.getZ(), -zAxis.dot(eye), //Z column
0.0f, 0.0f, 0.0f, 1.0f //W column
);
}
我的代码中的所有矩阵都按列主顺序定义。
另外,调试在顶点着色器中计算的gl_Position 以查看是否存在问题的好方法是什么?
【问题讨论】:
标签: java opengl math matrix shader