【发布时间】:2014-02-14 17:05:17
【问题描述】:
我有以下代码来初始化我在 lwjgl 中的两个矩阵:
GL20.glUseProgram(shaderProgramID);
Matrix4f camera = new Matrix4f();
Matrix4f.translate(new Vector3f(0, 0, 0), camera, camera);
FloatBuffer buffer = BufferUtils.createFloatBuffer(16);
camera.store(buffer);
buffer.flip();
GL20.glUniformMatrix2(GL20.glGetUniformLocation(shaderProgramID, "camera"), false, buffer);
GL20.glUseProgram(0);
float near = 0.1f, far = 100.0f, top = 300, bottom = -300, left = -400, right = 400;
Matrix4f projection = new Matrix4f();
projection.setIdentity();
projection.m00 = 2*near/(right - left);
projection.m11 = 2*near/(top - bottom);
projection.m22 = -(far +near)/(far - near);
projection.m23 = -1;
projection.m32 = -2*far*near/(far - near);
projection.m20 = (right+left)/(right -left);
projection.m21 = (top + bottom)/(top-bottom);
projection.m33 = 0;
FloatBuffer buffer2 = BufferUtils.createFloatBuffer(16);
projection.store(buffer2);
buffer.flip();
GL20.glUniformMatrix2(GL20.glGetUniformLocation(shaderProgramID, "projection"), false, buffer);
GL20.glUseProgram(0);
顶点着色器执行以下操作:
gl_Position = projection * camera * vec4(vert, 1);
我不知道它可能有什么问题......有人有想法吗?
【问题讨论】:
-
如果您的
Matrix4f类有一个名为setIdentity (...)的函数并且这不是在构造时执行的操作,那么您为什么只为您的投影矩阵调用它?翻译 identity 相机矩阵也是有意义的。 -
它不是我的类,它来自 org.lwjgl.util ...是的,它有方法 setIdentity() 但这实际上是什么意思?我也将它添加到camery,但它没有帮助......
-
setIdentity (...)设置矩阵,使其在主对角线上具有 1.0 值(m00、m11、m22、m33)并且所有其他值为 0.0。最重要的是,这会将 1.0 分配给m33。对于正确的平移和缩放,这一点很重要,但经常被忽视。 -
是的,我也在 Matrix4f 的源代码中找到了这个。但是我也看到这个类的构造函数调用了setIdentity(),所以再次调用它没有意义......所以这不会是错误......
标签: opengl matrix lwjgl projection