2017-12-20 5 views
0

ich diesen Code in onDrawFrame in meinem Renderer schrieb:Modell Matrix trasformations OpenGL ES 2.0

[...] 
setIdentityM(modelMatrix, 0); 
translateM(modelMatrix, 0, 40f, 0f, 25f); 
rotateM(modelMatrix, 0, 90f, 1f, 0f, 0f); 
scaleM(modelMatrix, 0, 6f, 6f, 6f); 

multiplyMM(MVPmatrix, 0, viewProjectionMatrix, 0, modelMatrix, 0); 
myHouse1coords = myHouse1.getWorldCoords(modelMatrix); //myHouse1coords is an array 
[...] 

ich diesen Code verwenden, um die Trasformation ich auf meinem "Haus" beziehen sich auf die Spur zu kommen:

[...] 
private final static float[] COORDINATES = { //x, y, z, r, g, b 
     0f, 0f, 0f, 1f, 0f, 0f, //bottom 
     2f, 0f, 0f, 0f, 1f, 0f, //dx 
     0f, 1f, 0f, 0f, 0f, 1f, //sx 
     2f, 1f, 0f, 1f, 1f, 1f //top 
}; 
    public float[] getWorldCoords(float[] matrix) 
{ 
    int i = 0; 
    float[] coordinates1 = new float[4]; 
    float[] coordinates2 = new float[4]; 
    float[] coordinates3 = new float[4]; 
    float[] coordinates4 = new float[4]; 

    do { 
     coordinates1[i] = COORDINATES[i]; 
     i++; 
    } while (i < 3); 
    i = 0; 
    coordinates1[3] = 0f; 

    do { 
     coordinates2[i] = COORDINATES[i + 6]; 
     i++; 
    } while (i < 3); 
    i = 0; 
    coordinates2[3] = 0f; 

    do { 
     coordinates3[i] = COORDINATES[i + 12]; 
     i++; 
    } while (i < 3); 
    i = 0; 
    coordinates3[3] = 0f; 

    do { 
     coordinates4[i] = COORDINATES[i + 18]; 
     i++; 
    } while (i < 3); 
    coordinates4[3] = 0f; 

    float[] finalCoordinates1 = new float[4]; 
    float[] finalCoordinates2 = new float[4]; 
    float[] finalCoordinates3 = new float[4]; 
    float[] finalCoordinates4 = new float[4]; 

    multiplyMV(finalCoordinates1, 0, matrix, 0, coordinates1, 0); 
    multiplyMV(finalCoordinates2, 0, matrix, 0, coordinates2, 0); 
    multiplyMV(finalCoordinates3, 0, matrix, 0, coordinates3, 0); 
    multiplyMV(finalCoordinates4, 0, matrix, 0, coordinates4, 0); 


    float[] coordinates = new float[16]; 
    i = 0; 
    int j = 0; 

    do { 
     coordinates[i] = finalCoordinates1[j]; 
     i++; 
     j++; 
    } while (j < 4); 
    j = 0; 

    do { 
     coordinates[i] = finalCoordinates2[j]; 
     i++; 
     j++; 
    } while (j < 4); 
    j = 0; 

    do { 
     coordinates[i] = finalCoordinates3[j]; 
     i++; 
     j++; 
    } while (j < 4); 
    j = 0; 

    do { 
     coordinates[i] = finalCoordinates4[j]; 
     i++; 
     j++; 
    } while (j < 4); 

    Log.d("DRAGTESTRENDERER", "coords[4]" + coordinates[4]); 
    return coordinates; 
} 

[...]

Das Problem ist, dass, wenn ich diesen Code in der Logcat ausführen ich 12.0 als Ergebnis, als ob ich nur die Skalierungstransformation auf mein Haus angewendet, und ich verstehe nicht, warum, da ich übersetze und drehe es pr Ewig.

Antwort

0

Das Problem war, dass ich das vierte Element meines Koordinatenvektors (die w-Komponente) auf 0f statt auf 1f setzte.