2014-02-22 68 views
0

我與OpenGL的像素級(2D)如何在OpenGL ES 2.0的在像素級的旋轉質地

一切都很好工作,直到我碰到旋轉

我已經嘗試了不同的方式,來到什麼

這是我在矩陣像素的級別上工作

float[] uScreen = 
     { 
     2f/width, 0f, 0f, 0f, 
     0f, -2f/height, 0f, 0f, 
     0f, 0f, 0f, 0f, 
     -1f, 1f, 0f, 1f 
     }; 

頂點

String vertexSrc = 
     "uniform mat4 uScreen;\n" + 
     "attribute vec2 aPosition;\n" + 
     "void main() {\n" + 
     " gl_Position = uScreen * vec4(aPosition.xy, 0.0, 1.0);\n" + 
     "}"; 

片段着色器

String fragmentSrc = 

    "precision mediump float;\n"+ 
    "void main(void)\n" + 
    "{\n" + 
    " gl_FragColor = vec4(1, 0, 0, 1);\n" + 
    "}"; 

這工作得很好,我可以在屏幕上的像素級繪製沒有問題。 但我想旋轉紋理,不知道怎麼

現在嘗試添加以下

long time = SystemClock.uptimeMillis() % 4000L; 
float angleX = 0.090f * ((int) time); 

float[] axis = { 1.0f,0.0f,0.0f}; 

Matrix.rotateM(uScreen,0,angleX,axis[0],axis[1],axis[2]); 



GLES20.glUniformMatrix4fv(uScreenPos, 1, false, uScreen, 0); 

質地旋轉,但有一個奇怪的行爲,周圍的一切0.0旋轉屏幕上沒有其中心

任何想法如何旋轉?

enter image description here

enter image description here

enter image description here

enter image description here

紋理(紅色)轉過0,0像素沒有在你的中心

+0

這將是有益的瞭解,如果您發佈的你是畫什麼的截圖,和你的預期屏幕上的旋轉位置是。 – prabindh

+0

就好像相機旋轉而不是紋理 –

回答

1

我被乘以MVP矩陣旋轉矩陣,所以我需要向後移動旋轉矩陣a第二前進的MVP矩陣

這是解決

Matrix.setIdentityM(rotationMat, 0); 
Matrix.setRotateM(rotationMat, 0,angleX,1,0,0); 
Matrix.translateM(uScreen, 0,sprite.x, sprite.y, 0); 
Matrix.translateM(rotationMat, 0,-sprite.x, -sprite.y, 0); 

現在的工作:)