我想在光線空間中模擬我的場景作爲我的陰影映射的準備,但是我非常困惑。計算lookAt矩陣不工作?
計算在我的着色器位置的線: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
以查看問題是否存在的好方法是什麼?
試過了,但還是不行,需要多調試一下。 – skiwi
將位置傳遞給片段着色器,並將其用作顏色來查看頂點的位置。 (編輯:更紅的意思是正X軸,更多綠色正Y ...你也可以縮放它以避免黑色的負值,你可以使用模型或世界座標,取決於你想檢查什麼) –
@SebastianHöffner這種方法假定生成的頂點屬於可見的基元。在將任何信息傳遞給片段着色器之前,應該確保最終將光柵化。否則,這將是調試'gl_Position'的下一步。 – user3146587