2016-09-22 163 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旋轉的對象? 目前我們正在繪製PNG/JPEG/BMP圖片以及2D平面中的自定義框。這是我們想旋轉的東西。我們正在計算這些對象的頂點座標,(4個座標爲框,2個爲BMP/JPEG/PNG)。我們嘗試計算座標並試圖以新的方向進行繪圖,但着色器應用程序沒有正確執行。 你能幫忙嗎? –

+0

對於旋轉,矩陣是要走的路。 MVP系統應該仍然可以用於2D。雖然,您可以縮小平移和縮放到x和y,而旋轉只是實現z旋轉矩陣。 – SporreKing

+0

需要記住的重要一點是,當旋轉應用於正在渲染的網格物體時,它將圍繞它的本地原點旋轉。這就是翻譯必須在着色器中應用的原因,以及爲什麼不能在外部更改頂點座標。否則,原點將從網格移開,並且它將看起來圍繞原點循環。很多人都忘記了這一點,這可能是導致錯誤結果的原因。 – SporreKing