(作业相关问题)
我正在尝试通过遵循本教程来实现阴影映射,但是,我遇到了一个奇怪的问题-我场景中的所有对象都将相同的阴影应用于它们,如下所示:(光在-3 ,5,-3(右下)
我做错了什么?我认为这将与矩阵有关,但我不知道如何解决...
创建视图矩阵:
viewMatrix = new Matrix4f();
Matrix4f.rotate(MathHelpers.degreesToRadians(verticalRotation), new Vector3f(1f, 0f, 0f), viewMatrix, viewMatrix);
Matrix4f.rotate(MathHelpers.degreesToRadians(horizontalRotation), new Vector3f(0f, 1f, 0f), viewMatrix, viewMatrix);
Matrix4f.translate(position, viewMatrix, viewMatrix);
viewMatrix.store(cameraMatrix);
cameraMatrix.flip();
将数据发送到GPU:
Mat4 proj2 = Matrices.perspective(90, 1, 3f, 20f);
Mat4 view2 = = MathHelpers.Matrix4fToMat4(lights.get(i).getViewMatrix());
Mat4 model2 = Mat4.MAT4_IDENTITY;
Mat4 mvp = MathHelpers.biasMVP(proj2, view2, model2);
FloatBuffer matBuffer = org.lwjgl.BufferUtils.createFloatBuffer(16);
MathHelpers.Mat4ToMatrix4f(mvp).store(matBuffer);
matBuffer.flip();
深度着色器:http : //pastebin.com/SqFaBnSE http://pastebin.com/t5t35XNM
普通着色器:http : //pastebin.com/yQhqyAWc http://pastebin.com/2C2sXByz
所以,我最终弄清楚了。这是一个简单的逻辑错误,没有使用正确的位置。
public static void setLightUniforms(int program, Matrix4f mat) { Mat4 proj2 = Matrices.perspective(90, 1, 3f, 20f); Mat4 view2 = = MathHelpers.Matrix4fToMat4(lights.get(i).getViewMatrix()); Mat4 model2 = Mat4.MAT4_IDENTITY;
我一直在使用恒等矩阵作为位置,而不是使用要计算的模型的位置。
现在的代码是(请注意该参数的用法):
public static void setLightUniforms(int program, Matrix4f mat) { Matrix4f proj = MathHelpers.Mat4ToMatrix4f(Matrices.perspective(90, 1, 3f, 20f)); Matrix4f view = lights.get(i).getViewMatrix(); Matrix4f bias = MathHelpers.Mat4ToMatrix4f(MathHelpers.biasMatrix); Matrix4f MVP = Matrix4f.mul(proj, Matrix4f.mul(view, mat, null), null); Matrix4f.mul(bias, MVP, MVP);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句