2017-06-27 5 views
0

現在、Android用の3Dゲームエンジンの開発に取り組んでおり、Lenovo TAB 10でも問題なく動作します回転中にメッシュが平坦化(スキュー)します。私はそれが1つのデバイス上で動作するので、どこから見るべきか分からない。何か案は?いずれかの軸で3次元回転させると、一部のAndroidデバイスでメッシュスキューが発生する

オブジェクト自体に対して、任意の軸(右、上、および前)の周りのすべてを回転します。

Matrix.setIdentityM(mMesh.mModelMatrix, 0); 
Matrix.translateM(mMesh.mModelMatrix, 0, mvLocation.mX, mvLocation.mY, mvLocation.mZ); 
Matrix.scaleM(mMesh.mModelMatrix, 0, mfScale, mfScale, mfScale); 
Matrix.multiplyMM(mMesh.mModelMatrix, 0, mMesh.mModelMatrix, 0, mMatRotate.getFloatArray(), 0); 
mMesh.draw(viewMatrix, projMatrix, Renderer); 

私のドローインサイド
cMatrix4( float a, float b, float c, float d, 
      float e, float f, float g, float h, 
      float i, float j, float k, float l, 
      float m, float n, float o, float p) 
{ 
    mfMatrixData[0] = a; mfMatrixData[1] = b; mfMatrixData[2] = c; mfMatrixData[3] = d; 
    mfMatrixData[4] = e; mfMatrixData[5] = f; mfMatrixData[6] = g; mfMatrixData[7] = h; 
    mfMatrixData[8] = i; mfMatrixData[9] = j; mfMatrixData[10] = k; mfMatrixData[11] = l; 
    mfMatrixData[12] = m; mfMatrixData[13] = n; mfMatrixData[14] = o; mfMatrixData[15] = p; 
} 

()関数は次のようになります。次のように

mMatRotate = new cMatrix4(
     mvRight.mX,  mvUp.mX, mvForward.mX, 0.0f, 
     mvRight.mY,  mvUp.mY, mvForward.mY, 0.0f, 
     mvRight.mZ,  mvUp.mZ, mvForward.mZ, 0.0f, 
     0.0f,   0.0f,  0.0f,   1.0f); 

実際の行列が定義されている次のように回転軸は、回転行列に入れています

最終的な変換は次のようになります。

私はこんなことに固執しています。どんな提案も役に立ちます。

答えて

0

私はこの問題を自分で解決しました。他の誰かが興味を持ったり似たような問題に遭遇した場合は、ここに投稿します。サムスンギャラクシーコアプライムは、Lenovo TAB 10は完全にハードウェアに依存しているという事実はすべて解消されています。問題はラインである:ハードウェアで

Matrix.multiplyMM(mMesh.mModelMatrix, 0, mMesh.mModelMatrix, 0, mMatRotate.getFloatArray(), 0); 

、行列乗算を実行し、入力行列の一つに結果を配置しても大丈夫です、そうです。ソフトウェアの実装は同じように機能しません。行列の乗算を行うたびにコピーを作成するには時間がかかりすぎるので、これは理にかなっています。

関連する問題