2015-07-02 4 views
2

В целях освещения мне нужно получить текущую матрицу преобразования.Как я могу получить текущую матрицу преобразования OpenGL в Matrix4f?

Например, Matrix4f transMatrix = Get_OpenGL_Transformation_Matrix

Существуют различные ответы на форумах, но они либо не работают, или у людей, не соглашаясь друг с другом.

+0

Это современный открытый gl, о котором мы говорим, или устаревший стиль pushMatrix() opengl? –

+0

@LloydCrawley Довольно уверен, что это устарело. – Joehot200

ответ

1

Простой.

float[16] transMatrix; 
glGetFloatv(GL_MODELVIEW_MATRIX, transMatrix); 
+0

Я не хочу этого в поплавке [], хотя - я хочу его в Matrix4f. Есть ли легкая конверсия? Кроме того, является ли MODELVIEW_MATRIX такой же, как матрица преобразования? – Joehot200

+0

Это я идиот. Но я должен быть в состоянии помочь вам. Если вы используете lwjgl, то матрица преобразования - это просто любая матрица, преобразующая геометрию в нужное положение/поворот/масштаб. Вы должны просто иметь возможность умножить/создать эту матрицу в своем шейдере или, альтернативно, сделать все умножение вне вашего шейдера, а затем передать его как униформу. Что вы пытаетесь сделать точно? –

+0

Я мог бы сделать все преобразования, а затем передать его шейдеру для использования в качестве данных о местоположении, но это немного боль. Вместо этого я хотел бы использовать все вызовы glTranslate() и glRotate(), которые у меня есть в настоящее время, но затем можно отдельно получить это преобразование и передать его в шейдер. – Joehot200

2

Это исключительно из документации, я никогда не использовал LWJGL. Но я считаю, что что-то вроде этого должно работать:

// Create FloatBuffer that can hold 16 values. 
FloatBuffer buf = BufferUtils.createFloatBuffer(16); 

// Get current modelview matrix: 
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, buf); 

// Rewind buffer. Not sure if this is needed, but it can't hurt. 
buf.rewind(); 

// Create a Matrix4f. 
Matrix4f mat = new Matrix4f(); 

// Load matrix from buf into the Matrix4f. 
mat.load(buf); 
+0

И модельная матрица является матрицей преобразования, верно? (Матрица, которая содержит местоположение, поворот и масштаб объекта) – Joehot200

+1

Вы также можете иметь матрицу проецирования. Но ваши трансформации объектов обычно являются частью матрицы представления модели, да. Используемое здесь перечисление совпадает с тем, которое вы используете в качестве аргумента для 'glMatrixMode()' перед установкой матриц. –

Смежные вопросы