1

JPCT-AE経由でモデルをレンダリングし、ARToolkitを使用してARアプリケーションを実現したい。

そのため、以下のコードを ARToolkit プロジェクトに挿入します。

    Matrix projMatrix = new Matrix();
    projMatrix.setDump(ARNativeActivity.getProjectM());
    projMatrix.transformToGL();
    SimpleVector translation = projMatrix.getTranslation();
    SimpleVector dir = projMatrix.getZAxis();
    SimpleVector up = projMatrix.getYAxis();
    cameraController.setPosition(translation);
    cameraController.setOrientation(dir, up);

    Matrix transformM = new Matrix();
    transformM .setDump(ARNativeActivity.getTransformationM());
    transformM .transformToGL();

    model.clearTranslation();
    model.translate(transformM .getTranslation());

    dump.setRow(3,0.0f,0.0f,0.0f,1.0f);
    model.clearRotation();
    model.setRotationMatrix(transformM );  

そして、モデルは画面上にレンダリングできますが、常に画面内のマーク上にあります。

実際、ARToolkit::ARNativeActivity.getTransformationMatrix() からのマトリックス出力は正しいので、この 4*4Matrix を変換マトリックスと回転マトリックスに分割し、次のようにモデルに設定します。

model.translate(transformM .getTranslation());
model.setRotationMatrix(transformM ); 

しかし、まだ仕事はありません。

4

1 に答える 1

1

コードをより適切に整理し、マトリックスを使用して、モデルに対して行う変換とモデルをマーカーに配置する変換を分離することをお勧めします。

私が提案するのは:

まず、追加のマトリックスを使用します。モデルに対して行われた変換 (スケール、回転、移動) を格納するため、modelMatrix と呼ばれることがあります。

次に、このメソッドの外部ですべての行列を宣言し (これはパフォーマンス上の理由のみですが、推奨されます)、各フレームで単純にそれらに setIdentity を設定します。

projMatrix.setIdentity();
transformM.setIdentity();
modelM.setIdentity();

後で、modelM マトリックスでモデル変換を行います。この変換は、マーカーに配置された後、モデルに適用されます。

modelM.rotateZ((float) Math.toRadians(-angle+180));
modelM.translate(movementX, movementY, 0);

次に、modelM 行列に trasnformM を掛けます (これは、すべての変換を完了し、transformM が示すようにそれらを移動および回転させることを意味します。この場合、モデルに対して行われたすべての変換がマーカーの上に移動されることを意味します)。 .

//now multiply trasnformationMat * modelMat
modelM.matMul(trasnformM);

最後に、モデルに回転と平行移動を適用します。

model.setRotationMatrix(modelM);
model.setTranslationMatrix(modelM);

したがって、コード全体は次のようになります。

projMatrix.setIdentity();
projMatrix.setDump(ARNativeActivity.getProjectM());
projMatrix.transformToGL();
SimpleVector translation = projMatrix.getTranslation();
SimpleVector dir = projMatrix.getZAxis();
SimpleVector up = projMatrix.getYAxis();
cameraController.setPosition(translation);
cameraController.setOrientation(dir, up);

model.clearTranslation();
model.clearRotation();

transformM.setIdentity();
transformM .setDump(ARNativeActivity.getTransformationM());
transformM .transformToGL();

modelM.setIdentity()
//do whatever you want to your model
modelM.rotateZ((float)Math.toRadians(180));

modelM.matMul(transformM);

model.setRotationMatrix(modelM );  
model.setTranslationMatrix(modelM);

マトリックスと OpenGL に関するこのチュートリアルを見ることを強くお勧めします。JPCT に関するものではありませんが、すべての概念がそこにも適用される可能性があります。ご覧のとおり、ARSimple の例でモデルをマーカーに正しく配置するために使用したものです。私が作ったこのブログエントリで

お役に立てれば!

于 2015-12-28T07:02:50.087 に答える