2017-12-20 16 views
0

私は私のレンダラでonDrawFrameでこのコードを書いた:モデルマトリックス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 
[...] 

私は "家" には適用さtrasformationを追跡するために、このコードを使用します。

[...] 
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; 
} 

[...]

問題は、logcatでこのコードを実行すると、12.0という結果が得られます。私は自分の家にスケールの情報を適用したように、理由はわかりません。それを回転させるpr明らかに。

答えて

0

問題は、座標ベクトル(w要素)の4番目の要素を1fではなく0fに設定したことです。