2016-09-22 6 views
0

우리는 OpenGL ES 2.0에서 BMP 이미지를 그릴 때 다음 코드를 사용합니다 : (x1, y1은 왼쪽 하단 좌표이고 x2, y2는 화면상의 객체의 오른쪽 상단 좌표이며, tempimage 데이터는 저장된 bmp 이미지 정보에 대한 포인터입니다.)회전 객체 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 회전을위한 것입니다. (내가 틀렸다면 수정하십시오.) 이것은 현재 상당히 복잡합니다. 객체를 2D로 회전시키는 방법이 있습니까? 현재 2D 평면에서 사용자 정의 상자뿐만 아니라 PNG/JPEG/BMP 그림도 플로팅하고 있습니다. 이것이 우리가 원하는 것입니다. 우리는 이러한 객체에 대한 정점 좌표를 계산합니다 (상자에 4 세트 좌표, BMP/JPEG/PNG에 대해 2 세트). 우리는 좌표를 계산하려고 시도하고 새로운 방향으로 플롯하려했지만 셰이더가 제대로 적용되지 않습니다. 도와 드릴까요? –

+0

회전의 경우 행렬이 필요합니다. MVP 시스템은 2D에서도 여전히 사용해야합니다. 변환을 축소하고 x와 y로 축척 할 수는 있지만 회전의 경우 z 회전 행렬 만 구현할 수 있습니다. – SporreKing

+0

기억해야 할 중요한 점은 렌더링하는 메쉬에 회전을 적용하면 로컬 원점을 기준으로 회전한다는 것입니다. 이것이 번역이 쉐이더에 적용되어야하는 이유이며 외부에서 정점 좌표를 변경할 수없는 이유입니다. 그렇지 않으면 원점이 메시에서 멀리 이동하고 원점을 중심으로 겉으로 순환합니다. 많은 사람들이이를 잊어 버리고 부정확 한 결과를 초래할 수 있습니다. – SporreKing