Java OpenGL:glLoadMatrix&;深度缓冲器
另一个深度缓冲问题: 我有基于矩阵的相机-矩阵的合成在OpenGL端(glPushMatrix,旋转,从OpenGL获取矩阵,GLPOPMARRIX),当更新相机时,我通过glLoadMatrix将计算出的矩阵内容发送给OpenGL。一切正常(移动和旋转),但深度缓冲区混乱: 无glLoadMatrix(无移动/旋转): 使用glLoadMatrix: 我不明白,为什么会发生这些事情(如果我用“经典”三角函数移动相机,一切都没问题)Java OpenGL:glLoadMatrix&;深度缓冲器,java,lwjgl,Java,Lwjgl,另一个深度缓冲问题: 我有基于矩阵的相机-矩阵的合成在OpenGL端(glPushMatrix,旋转,从OpenGL获取矩阵,GLPOPMARRIX),当更新相机时,我通过glLoadMatrix将计算出的矩阵内容发送给OpenGL。一切正常(移动和旋转),但深度缓冲区混乱: 无glLoadMatrix(无移动/旋转): 使用glLoadMatrix: 我不明白,为什么会发生这些事情(如果我用“经典”三角函数移动相机,一切都没问题) 我修改了滴答法: @Override public voi
我修改了滴答法:
@Override
public void tick(float aTick) {
float m01 = matrix.get(1);
float m02 = matrix.get(2);
float m04 = matrix.get(4);
float m06 = matrix.get(6);
float m08 = matrix.get(8);
float m09 = matrix.get(9);
float m12 = matrix.get(12);
float m13 = matrix.get(13);
float m14 = matrix.get(14);
buffer.put(matrix);
buffer.put(1, m04);
buffer.put(2, m08);
buffer.put(4, m01);
buffer.put(6, m09);
buffer.put(8, m02);
buffer.put(9, m06);
buffer.put(12, -(matrix.get(0) * m12 + m01 * m13 + m02 * m14));
buffer.put(13, -(m04 * m12 + matrix.get(5) * m13 + m06 * m14));
buffer.put(14, -(m08 * m12 + m09 * m13 + matrix.get(10) * m14));
buffer.rewind();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLoadMatrix(buffer);
}
正如immibis指出的,我没有复制matrix
dobuffer
的所有值,而不良的副作用是错误的深度缓冲计算
现在可以了。为什么要在
勾选中重新计算矩阵的一部分,为什么不转移整个矩阵?Ou maaan!!你有鹰眼!我已经做了一些调整,现在,所有的坏幽灵都消失了!我把buffer.put(矩阵)代码>在m14之后,现在可以了!
@Override
public void tick(float aTick) {
float m01 = matrix.get(1);
float m02 = matrix.get(2);
float m04 = matrix.get(4);
float m06 = matrix.get(6);
float m08 = matrix.get(8);
float m09 = matrix.get(9);
float m12 = matrix.get(12);
float m13 = matrix.get(13);
float m14 = matrix.get(14);
buffer.put(matrix);
buffer.put(1, m04);
buffer.put(2, m08);
buffer.put(4, m01);
buffer.put(6, m09);
buffer.put(8, m02);
buffer.put(9, m06);
buffer.put(12, -(matrix.get(0) * m12 + m01 * m13 + m02 * m14));
buffer.put(13, -(m04 * m12 + matrix.get(5) * m13 + m06 * m14));
buffer.put(14, -(m08 * m12 + m09 * m13 + matrix.get(10) * m14));
buffer.rewind();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLoadMatrix(buffer);
}