Uso di Matrice. Ruota in OpenGL ES 2.0

Modifica – Aggiunto più codice

Avendo un sacco di problemi che tentano di ruotare correttamente il mio quadratino utilizzando OpenGL ES 2.0.

  • Come mantenere l'applicazione Applet Servlet Ascoltare Firebase
  • Cassetto di navigazione Android e windowActionBarOverlay = true
  • SMS mancante dai risultati del fornitore del contenuto su Android Marshmallow
  • SimpleCursorAdapter come mostrare un'image?
  • Registrazione vocale Applicazione in android
  • In-App fatturazione v3, l'intento bindService () non può essere trovato
  • Sembra sempre ruotare attorno al centro delle coordinate dello schermo. Sto cercando di farlo ruotare intorno al proprio centro (per 2d, quindi solo per l'asse z).

    Ho sperimentato Matrix.translate come mostrato di seguito. Tuttavia, cambiando il punto x o y qui semplicemente disegna il quadrato in un posto diverso sullo schermo, ma quando ruota, ruota ancora intorno al centro dello schermo. Si prega di qualcuno spiegare come farlo spin intorno è proprio asse z (come una ruota)?

    Grazie, qui sono le linee di codice pertinenti – se più è necessario, ti preghiamo di chiedere e farò postare. (Si prega di notare che ho analizzato molte domande simili su SO e sul più ampio internet ma non sono riuscito a trovare una risposta finora).

    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); 

    I miei Shaders (dichiarati a livello di class)

     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); 

  • Facendo clic sul button sulla seconda attività, si è verificato un errore nell'esecuzione di "singolo scatto" o "scorri fino a" in visualizzazione
  • Come impostare la networking su VirtualBox per Android 2.3
  • Come posso serializzare la mia class utente per il database Firebase e correggere questo errore?
  • Gson trasformare una serie di oggetti dati in json - Android
  • Come combinare un progetto di studio di android in un altro studio di studio in studio
  • Come aggiungere 3 immagini in una canvas in android
  • 4 Solutions collect form web for “Uso di Matrice. Ruota in OpenGL ES 2.0”

    Ho incontrato gli stessi problemi (visto le strane distorsioni e tutto il resto), la mia soluzione basata su Android Training> Visualizzazione di grafica con OpenGL ES> Aggiunta di movimento sotto.

    (Vai al mio post dettagliato per se necessario: OpenGL ES Transformations Matrix Android ).

    1. Impostare una mModelMatrix alla matrix di identity framework;

       Matrix.setIdentityM(mModelMatrix, 0); // initialize to identity matrix 
    2. Applica la traduzione alla mModelMatrix

       Matrix.translateM(mModelMatrix, 0, -0.5f, 0, 0); // translation to the left 
    3. Applicare la rotazione su una mRotationMatrix (angoli in gradi)

       Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f); 
    4. Combina la rotazione e la traduzione tramite Matrix.multiplyMM

       mTempMatrix = mModelMatrix.clone(); Matrix.multiplyMM(mModelMatrix, 0, mTempMatrix, 0, mRotationMatrix, 0); 
    5. Unire la matrix di templates con la vista della proiezione e della camera

       mTempMatrix = mMVPMatrix.clone(); Matrix.multiplyMM(mMVPMatrix, 0, mTempMatrix, 0, mModelMatrix, 0); 

    Ecco una passeggiata. Diciamo che dovresti disegnare una teiera … la modelMatrix sarebbe un'identity framework; da cominciare. La forma è centrata sull'origine come questa:

    pre girare e tradurre

    Verifica che questo sia quello che hai prima di continuare …

    Una volta che tu dovresti applicare la rotazione alla matrix di templates, compila e gestisci – ottieni una copia ruotata …

    ruotato

    Una volta che hai questo puoi tradurre:

    ruotato e tradotto

    Quindi per te, tutto quello che devi fare visualizza per verificare quando la matrix di rotazione è identity framework;, ad esempio Matrix.setIdentityM (mRotationMatrix, 0); che la forma è al centro. Se non è spostarlo al centro.

    Una volta che è al centro applicare la rotazione ad es

      Matrix.setIdentityM( mRotationMatrix,0); <as needed movement to center> Matrix.rotate(mRotationMatrix, 0, -angle, 0, 0, 1.0f); <any other translation you want> 

    Farlo a passo per rendere la tua vita facile in modo da vedere cosa sta succedendo.

    La rotazione si verifica normalmente intorno all'origine, quindi si desidera ruotare il quad prima di tradurlo. Se si ruota dopo la traduzione, il quad sarà prima rimosso dall'origine, quindi ruotato intorno all'origine.

    Senza sapere come vengono implementate le funzioni di Matrice, non possiamo consigliare se le usi correttamente. Tutto quello che ci hai mostrato nell'interface delle funzioni.

    Ma in generale, ruotare prima di tradurre.

    Applica le tue operazioni all'indietro:

    1 ° Matrix.translateM (mRotationMatrix, 0, -5f, .5f, 0f);

    2. Matrix.setRotateM (mRotationMatrix, 0, -angolo, 0, 0, 1.0f);

    Ruoterà intorno al proprio centro

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.