2017-12-20 30 views
0

매트릭스 trasformations의 OpenGL ES :모델 내 렌더러에 onDrawFrame이 코드를 작성 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을 얻을 수 있습니다. 마치 집에 규모 정보를 적용한 것처럼, 왜 번역할까요? 회전시키다. 물론.

답변

0

문제는 좌표 벡터 (w 구성 요소)의 4 번째 요소를 1f 대신 0f로 설정하는 것이 었습니다.