Java OpenGL:glLoadMatrix&;深度缓冲器

Java OpenGL:glLoadMatrix&;深度缓冲器,java,lwjgl,Java,Lwjgl,另一个深度缓冲问题: 我有基于矩阵的相机-矩阵的合成在OpenGL端(glPushMatrix,旋转,从OpenGL获取矩阵,GLPOPMARRIX),当更新相机时,我通过glLoadMatrix将计算出的矩阵内容发送给OpenGL。一切正常(移动和旋转),但深度缓冲区混乱: 无glLoadMatrix(无移动/旋转): 使用glLoadMatrix: 我不明白,为什么会发生这些事情(如果我用“经典”三角函数移动相机,一切都没问题) 我修改了滴答法: @Override public voi

另一个深度缓冲问题:

我有基于矩阵的相机-矩阵的合成在OpenGL端(glPushMatrix,旋转,从OpenGL获取矩阵,GLPOPMARRIX),当更新相机时,我通过glLoadMatrix将计算出的矩阵内容发送给OpenGL。一切正常(移动和旋转),但深度缓冲区混乱:

无glLoadMatrix(无移动/旋转):

使用glLoadMatrix:

我不明白,为什么会发生这些事情(如果我用“经典”三角函数移动相机,一切都没问题)


我修改了滴答法:

@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
do
buffer
的所有值,而不良的副作用是错误的深度缓冲计算


现在可以了。

为什么要在
勾选中重新计算矩阵的一部分,为什么不转移整个矩阵?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);
}