2013-06-20 83 views
2

我對使用OpenGL ES 2.0相當陌生。也即時使用iPhone和GLM數學庫。正如我參考的,我一直在使用本教程:http://tomdalling.com/blog/modern-opengl/03-matrices-depth-buffering-animation/但是我發現很難找到2D OpenGL教程。2D opengl旋轉導致精靈失真

我想旋轉2D精靈但圖像被扭曲。 例如以0度的旋轉角度:http://i.imgur.com/yBTN2ST.png和以45度的旋轉角度:http://i.imgur.com/cY5IJcg.png

以我精靈類

glm::mat4 projection = glm::ortho(0.0f, 480.0f, 0.0f, 320.0f); 
glUniformMatrix4fv(projectionUniform, 1, GL_FALSE, glm::value_ptr(projection)); 

glm::mat4 newModel = glm::rotate(glm::mat4(), 0.0f, glm::vec3(0, 0, 1)); 
glUniformMatrix4fv(modelUniform, 1, GL_FALSE, value_ptr(newModel)); 

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 


以我的頂點着色器

vec4 newPosition = vec4(position + offset, 0.0, 1.0); 
gl_Position = model * projection * newPosition; 

我認爲這部分問題是圖像是b eing旋轉而不考慮縱橫比我不知道如何解決這個問題。

謝謝

回答

0

我想你是以錯誤的順序應用你的轉換。

相反的:

gl_Position = model * projection * newPosition; 

嘗試:

gl_Position = projection * model * newPosition; 

更妙的是(爲了避免乘以2點4X4矩陣一起):

gl_Position = projection * (model * newPosition); 

更妙的是:乘你的矩陣中的應用程序並在着色器中執行單個矩陣向量乘法。您應該也可以在矩陣中包含翻譯。

+0

我試過你的代碼,它似乎修復了偏移問題。但是,圖像似乎並未圍繞其中心旋轉。 http://i.imgur.com/C2oIM96.png請您澄清一下您的翻譯意思。這是否移動矩陣?謝謝。 – Eamonn

+0

glm :: rotate將圍繞原點創建一個旋轉。要圍繞不同的點旋轉,必須將該點翻譯爲原點,旋轉,然後再次翻譯。如果精靈的頂點被定義爲原點位於中心,那麼這很容易。您想要如下組合矩陣:投影*平移*旋轉。翻譯是一種改變立場。 – GuyRT

+0

明白了。非常感謝你的幫助。 – Eamonn