У меня есть два VBOs, которые я пытаюсь сделать, оба они должны иметь две разные позиции на экране. Когда я пытаюсь изменить позицию одного из VBOs, он переходит к другому.LWJGL (OpenGL) Матрица модели VBO неправильно отображается
Пример: я изменяю позицию y объекта 2, и объект 1, и объект 2 теперь существуют в этом положении y.
Мой код для преобразования РВО:
Matrix4f.scale(scale, modelMatrix, modelMatrix);
Matrix4f.translate(position, modelMatrix, modelMatrix);
Matrix4f.rotate(Toolkit.degToRad(rotation.x), new Vector3f(1f,0f,0f), modelMatrix, modelMatrix);
Matrix4f.rotate(Toolkit.degToRad(rotation.y), new Vector3f(0f,1f,0f), modelMatrix, modelMatrix);
Matrix4f.rotate(Toolkit.degToRad(rotation.z), new Vector3f(0f,0f,1f), modelMatrix, modelMatrix);
Обратите внимание, что положение, поворот и масштаб все Vector3fs и modelMatrix хорошо, матричная модель.
Также, Toolkit.degToRad похож на метод типа Math.toRadians().
Мой код для передачи информации на шейдер:
//Apply Transformations
camera.reset();
camera.transform();
glUseProgram(ss.pId);
//Projection Matrix
camera.projectionMatrix.store(camera.matrixBuffer);
camera.matrixBuffer.flip();
projection.Matrix4(camera.matrixBuffer);
//View Matrix
camera.viewMatrix.store(camera.matrixBuffer);
camera.matrixBuffer.flip();
view.Matrix4(camera.matrixBuffer);
glUseProgram(0);
//Apply Transformations
obj.reset();
obj.transform();
glUseProgram(ss.pId);
//Object 1
obj.modelMatrix.store(camera.matrixBuffer);
camera.matrixBuffer.flip();
model.Matrix4(camera.matrixBuffer);
glUseProgram(0);
//Apply Transformations
obj2.reset();
obj2.transform();
glUseProgram(ss.pId);
obj2.modelMatrix.store(camera.matrixBuffer);
camera.matrixBuffer.flip();
model.Matrix4(camera.matrixBuffer);
glUseProgram(0);
OBJ и obj2 являются О, модель шейдера форма, камерой является камерой, и сс является программой шейдера и ss.pId является программой Я бы.
Мой код для рисования РВО: Обратите внимание, что это находится в OBJ и obj2 и используется как этот
obj.draw();
obj2.draw();
А вот метод рисования
GL20.glUseProgram(ss.pId);
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, t.id);
GL30.glBindVertexArray(g.vaoId);
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);
GL20.glEnableVertexAttribArray(2);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, g.vboiId);
GL11.glDrawElements(GL11.GL_TRIANGLES, g.indices, GL11.GL_UNSIGNED_BYTE, 0);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL20.glDisableVertexAttribArray(2);
GL20.glUseProgram(0);
GL20.glUseProgram(ss.pId);
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, t.id);
GL30.glBindVertexArray(g.vaoId);
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);
GL20.glEnableVertexAttribArray(2);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, g.vboiId);
GL11.glDrawElements(GL11.GL_TRIANGLES, g.indices, GL11.GL_UNSIGNED_BYTE, 0);
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL20.glDisableVertexAttribArray(2);
GL20.glUseProgram(0);
г класс геометрия ,
g содержит идентификаторы буфера id и вершины buffer id. t содержит текстуру и идентификатор.
Благодарим за помощь.
Где вы на самом деле рисования ваших объектов? –
Не уверен, что вы подразумеваете под тем, где – irishpatrick
Где в коде ваши призывы к розыгрышу? Я не вижу никаких призывов на призыв в вашем «коде для рисования VBOs». –