2017-07-05 1 views
0

Ich entwickle eine App zur Erstellung von Terrain auf Android mit OpenGL ES, und ich habe Probleme, die Kamera um sich selbst zu drehen (der FPS-Effekt, um es klar zu machen). , was ich tue mit Matrix.setLookAtM die Ansicht zu bewegen und dann nach der Ansicht Drehen des origin.This übersetzen ist ein Ausschnitt aus dem Code:OpenGL ES Android - Drehen Sie die Kamera um sich selbst

Matrix.setLookAtM(mViewMatrix, 0, xrot, eyeY, yrot, xrot, lookY, yrot,0.0f, 1.0f, 0.0f); 

    Matrix.translateM(mViewMatrix,0,-xrot,0f,-yrot); 
    Matrix.rotateM(mViewMatrix, 0, mAngleX+mAngleY, 0.0f, 1.0f,0.0f); 
    Matrix.translateM(mViewMatrix,0,xrot,0f,yrot); 

wo xrot, yrot, mAngleX+mAngleY Eingabe von dem Touchscreen sind . Dieser Code funktioniert nur im Ursprung, aber wenn Sie ihn bewegen, dreht er sich um die y-Achse der Welt und nicht die Kamera. Ich schätze, ich mache es nicht richtig, aber ich habe keinen Weg gefunden, es zu tun, der überall funktioniert.

Antwort

0

fand ich einen Weg, es zu tun:

Matrix.setIdentityM(mCurrentRotation, 0); 
    Matrix.rotateM(mCurrentRotation, 0, mAngleY+mAngleX, 0.0f,1.0f, 0.0f); 
    Matrix.rotateM(mCurrentRotation, 0, mAngleX, 0.0f,0.0f, 1.0f); 
    mAngleX = 0.0f; 
    mAngleY = 0.0f; 

    Matrix.multiplyMM(mTemporaryMatrix, 0, mCurrentRotation, 0, mAccumulatedRotation, 0); 

    System.arraycopy(mTemporaryMatrix, 0, mAccumulatedRotation, 0, 16); 
    Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0); 
    // multiply the rotation just for model*view 
    Matrix.multiplyMM(mMVPMatrix, 0, mTemporaryMatrix, 0, mMVPMatrix, 0); 
    //than add projection as usual 
    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0); 

Wo mTemporaryMatrix, mCurrentRotation,mAccumulatedRotation, Matrizen Gesamtdrehung zu berechnen, Bilddrehung zu halten und speichern Sie die ganze Drehung der Kamera verbunden. Diese Lösung funktioniert für die Rotation, aber die Kamera bewegt sich nicht in die Richtung, in die sie zeigt.