Я использую Java и JOGL для создания 3D-материалов. Я произвожу мои взгляд и проекционные матрицы с библиотекой JOML:OpenGL Глубинный буфер и ортопроекция
Matrix4f view = new Matrix4f()
.lookAt(new Vector3f(1.0f, 0.0f, 0.0f),
new Vector3f(0.0f, 0.0f, 0.0f),
new Vector3f(0.0f, 1.0f, 0.0f));
Matrix4f proj = new Matrix4f()
.ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);
Я посылаю эти матрицы шейдеров так:
gl.glUniformMatrix4fv(viewTransformLocation, 1, false, viewTransformMatrix, 0);
gl.glUniformMatrix4fv(projectionTransformLocation, 1, false, projectionTransformMatrix, 0);
Матрица не транспонировать в процессе.
После заполнения моего ВАО и РВО, я просто использовать следующее состояние для визуализации меша:
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glEnable(GL.GL_CULL_FACE);
gl.glCullFace(GL.GL_BACK);
gl.glEnable(GL.GL_DEPTH_TEST);
...
Сформированного изображения довольно странно, это выглядит как буфер глубины восстанавливается. После того, как я попытался изменить отображение, он работал как шарм.
gl.glDepthRange(1,0);
Может ли кто-нибудь сказать мне, почему это происходит? Я написал аналогичную программу на C++, используя библиотеку glm и те же настройки (за исключением обратного сопоставления, конечно), проблема не появилась.
У вас проблема с com.jogamp.opengl.util.glsl.fixedfunc.FixedFuncUtil и com.jogamp.opengl.util.PMVMatrix? – gouessej
Вы должны это прочитать: https://github.com/JOML-CI/JOML/issues/4#issuecomment-121584821 – gouessej
@gouessej: Спасибо, я прочитал его. Даже обнаружил ошибку в тексте: 'gl.glUniformMatrix4fv (mat4Location, 16, false, fb);'. Во всяком случае, я все еще не понимаю этого поведения. – Dexterslab