3

2D テクスチャのクワッドをレンダリングする単純な 2D エンジンがあり、現在はクワッドをスケーリングまたは回転できますが、変換しようとすると奇妙な歪みが発生します (クワッドは画面の左半分で押しつぶされ、無限遠近効果)、コードは次のとおりです。

private final float quad_vertex[] = {
-0.5f, 0.5f, 0.0f,   // top left
-0.5f, -0.5f, 0.0f,  // bottom left
0.5f, -0.5f, 0.0f,   // bottom right
0.5f,  0.5f, 0.0f    // top right
}; 

final float left = -width/2.0f;
final float right = width/2.0f;
final float bottom = -height/2.0f;
final float top = height/2.0f;
final float near = 0.1f;
final float far = 200.0f;

Matrix.orthoM(projection_matrix, 0, left, right, top, bottom, near, far);
Matrix.setLookAtM(view_matrix, 0, 0, 0, 1.0f, 0.0f, 0f, 0f, 0f, 1.0f, 0.0f);

...

Matrix.setIdentityM(model_matrix, 0);

Matrix.scaleM(model_matrix, 0, scale_width, scale_height, 1.0f);
Matrix.translateM(model_matrix, 0, x, 0, 0);
//Matrix.rotateM(model_matrix, 0, x, 1, 0, 0);
x = x + 1.0f;

Matrix.multiplyMM(viewprojection_matrix, 0, projection_matrix, 0, view_matrix, 0);
Matrix.multiplyMM(modelviewprojection_matrix, 0, viewprojection_matrix, 0, model_matrix, 0);

それで、何が問題なのですか?前もって感謝します :)

4

1 に答える 1

2

私が遭遇した同様の問題のように聞こえます。http://developer.android.com/training/graphics/opengl/index.htmlでチュートリアルコードを使用していました。シェーダーコードの行をからに変更すると、問題gl_Position = vPosition * uMVPMatrix;gl_Position = uMVPMatrix * vPosition;修正されました。

行列の乗算は非可換演算です。オペランドの順序が重要です。

于 2012-11-07T01:39:46.017 に答える