2016-09-22 4 views
0

Мы используем следующий код для построения BMP-изображения в OpenGL ES 2.0: (x1, y1 - нижние левые координаты, а x2, y2 - верхние правые координаты объектов на экране, tempimage данных является указателем на информацию ВМР изображения сохраняются)Rotate Object OpenGL ES 2.0

struct 
{ 
    GLuint uiId; 
    GLuint uiLowerLeftLoc; 
    GLuint uiScaleMatrixLoc; 
    GLuint auiLoc[eNumUniforms]; 
} 
m_ShaderProgram; 

glUniform2f(m_ShaderProgram.uiLowerLeftLoc, x1, y1); 
float afMatrix[4] = { x2 - x1, 0, 0, y2 - y1 }; 
glUniformMatrix2fv(m_ShaderProgram.uiScaleMatrixLoc, 1, GL_FALSE, afMatrix); 
glBindTexture(GL_TEXTURE_2D, m_uiTexForeground); 
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, tempimagedata); 
glBindBuffer(GL_ARRAY_BUFFER, m_uiVbo); 
glEnableVertexAttribArray(VERTEX_ARRAY); 
glVertexAttribPointer(VERTEX_ARRAY, 2, GL_FLOAT, GL_FALSE, 0, 0); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
glDisableVertexAttribArray(VERTEX_ARRAY); 

Я хочу, чтобы повернуть объект с точки зрения углов. Как это можно достичь?

ответ

0

Вы должны отправить матрицу поворота/трансфома в шейдер, который вы используете, прежде чем рендерить вашу сетку. В вашем вершинном шейдере умножьте координаты на матрицу.

Этот сайт хорош для понимания основ рендеринга с матрицами (он использует C++ и GLM): http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/

+0

Я новичок в OpenGL. Согласно пониманию, используемая матрица MVP предназначена для 3D-вращения (пожалуйста, исправьте меня, если я ошибаюсь), что на данный момент довольно сложно. Есть ли какой-либо метод только двумерного вращения объектов? В настоящее время мы рисуем изображение PNG/JPEG/BMP, а также пользовательские поля в 2D плоскости. Это то, что мы хотим повернуть. мы вычисляем координаты вершин для этих объектов, (4 заданных координаты для поля, 2 для BMP/JPEG/PNG). Мы попытались вычислить координаты и попытались построить с новой ориентацией, но применение шейдера не получилось должным образом. Вы можете помочь в этом? –

+0

Для вращения матрица - это путь. Система MVP должна использоваться даже для 2D. Хотя вы могли бы сузить трансляцию и масштабировать до x и y, а для вращения просто реализовать матрицу z-вращения. – SporreKing

+0

Важно помнить, что когда вращение применяется к сетке, которую вы выполняете, она будет вращаться вокруг локального источника. Вот почему перевод должен применяться в шейдере и почему вы не можете изменить внешние координаты вершин. В противном случае происхождение будет смещено от сетки, и оно, по-видимому, будет циркулировать вокруг источника. Многие люди забывают об этом, и это может быть причиной неправильного результата. – SporreKing

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

  • Нет связанных вопросов^_^