2

私が尋ねようとしていることは時々すでに議論されていることを知っていますが、それらすべてを調べた後、完全な答えが見つからないので、新しい質問をしています

JPCT-aeQCARと統合しようとすると、すべて期待どおりにうまくいき、jni の renderframe からモデルビュー マトリックスを取得し、それを Java で jpct モデルに正常に転送すると、期待どおりに完全に表示されます。しかし、この行列を JPCT ワールド カメラに渡そうとすると、モデルが消えてしまいます。

私のコード:onsurfacechanged:

world = new World();
            world.setAmbientLight(20, 20, 20);
            sun = new Light(world);
            sun.setIntensity(250, 250, 250);
            cube = Primitives.getCube(1);
            cube.calcTextureWrapSpherical();
            cube.strip();
            cube.build();
            world.addObject(cube);
            cam = world.getCamera();
            cam.moveCamera(Camera.CAMERA_MOVEOUT, 10);
            cam.lookAt(cube.getTransformedCenter());
            SimpleVector sv = new SimpleVector();
            sv.set(cube.getTransformedCenter());
            sv.y -= 100;
            sv.z -= 100;
            sun.setPosition(sv);
            MemoryHelper.compact();

そして ondraw で:

com.threed.jpct.Matrix mResult = new com.threed.jpct.Matrix();
            mResult.setDump(modelviewMatrix );  //modelviewMatrix i get from Qcar
            cube.setRotationMatrix(mResult);
            cam.setBack(mResult);
                     fb.clear(back);
        world.renderScene(fb);
        world.draw(fb);
        fb.display();

いくつかの調査の結果、QCAR は右手座標系を使用していることがわかりました。つまり、X の正が右に進み、Y の正が上に移動し、Z の正が画面から出てきますが、JPCT 座標系では、X の正が右に進み、Y の正が移動します。 Z プラスがスクリーンに入ります。

Qcar 座標系:

QCAR座標系

行列 QCar が与えているのは、3*3 の回転値と平行移動ベクトルを持つ 4*4 行列であることを知っています。

より明確にするために行列を投稿しています:

モデルビューマトリックス:

1.512537      -159.66255   -10.275316   0.0
-89.86529      -1.1592013   4.7839375            0.0
-8.619186     10.179538     -159.44305   0.0
59.182976        93.205956     437.2832            1.0

cam.setBack(modelviewmatrix.invert(modelviewmatrix)) を使用して反転した後の modelviewmatrix :

5.9083453E-5   -0.01109448   -3.3668696E-4   0.0
0.0040540528   -3.8752193E-4   0.0047518034   0.0
-0.004756433   -4.6811014E-4   0.0040459237   0.0
0.7533285     0.4116795            2.7063704   0.9999999

3*3 回転行列を想定して 13、14、および 15 の行列要素を削除すると、モデルは適切に回転しますが、移動 (画像の移動と移動) は最終的に存在しません。移動ベクトルの変更が必要かどうかはわかりません。ここで何が欠けているのか教えてください。

4

1 に答える 1

0

QCAR::Matrix44F inverseMatrix = SampleMath::Matrix44FInverse(modelViewMatrix); QCAR::Matrix44F invTransposeMatrix = SampleMath::Matrix44FTranspose(inverseMatrix);

次に、invTransposeMatrix値をJavaに渡します

env->SetFloatArrayRegion(modelviewArray, 0, 16, invTransposeMatrix.data); env->CallVoidMethod(obj, method, modelviewArray);

于 2014-09-16T09:14:27.083 に答える