Modifica - Aggiunto più codiceUtilizzo di Matrix. Ruotare in OpenGL ES 2.0
Avere un sacco di problemi che tentano di ruotare correttamente il mio quad utilizzando OpenGL ES 2.0.
Sembra sempre ruotare attorno al centro delle coordinate dello schermo. Sto cercando di farlo ruotare attorno al suo centro (per 2d, quindi solo per l'asse z).
Ho sperimentato Matrix.translate come mostrato di seguito. Tuttavia, cambiando la posizione x o y qui semplicemente si disegna il quad in una posizione diversa sullo schermo, ma quando ruota, di nuovo ruota intorno al centro dello schermo. Per favore qualcuno potrebbe spiegare come farlo ruotare attorno al proprio asse z (come una ruota)?
Grazie, ecco le righe di codice pertinenti: se ne è necessario altro, si prega di chiedere e posterò. (Si noti che ho esaminato molte domande simili su SO e su Internet in generale, ma non sono riuscito a trovare una risposta fino ad ora).
Grazie.
//Set rotation
Matrix.setRotateM(mRotationMatrix, 0, -angle, 0, 0, 1.0f);
//Testing translation
Matrix.translateM(mRotationMatrix, 0, -.5f, .5f, 0f);
// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mvpMatrix, 0, mRotationMatrix, 0, mvpMatrix, 0);
miei Shaders (dichiarati a livello di classe)
private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
"}";
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";
Da onSurfaceChanged
float ratio = (float) width/height;
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
Nel mio metodo onDrawFrame
// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, 3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
//Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
Ciao @Sebby Johanns. Grazie per il commento, non sto ruotando prima della traduzione al momento? Sarei grato se potessi spiegare in modo più dettagliato - Ho aggiunto altro codice - è abbastanza? Si prega di avvisare se avete bisogno di più (e quale parte avete bisogno) - grazie mille !! – Zippy
Se la traduzione ha lo scopo di spostare il centro di rotazione, e non di spostare il quad, quindi si traduce, si ruota, si traduce. – mbeckish
@mbeckish grazie per il commento, ho sentito persone dire 'traslate e traduci' ma devo ancora capirlo completamente, penso che tu voglia tradurre le xe y e poi tradurre nuovamente con i valori opposti (dici, 1,1 e poi -1, -1) - per favore potresti modificare per mostrare un esempio? Ho provato questo, ma non ho ottenuto nulla. Grazie! – Zippy