1

コードに「午前 5 時の問題」があります。私のプログラムは3Dモデルを表示する必要があり、アークボール法を使用して回転する必要があります。これまでのところ、計算したものはすべて問題ありませんでした(信じています...)次にやりたいことは、カーソルをドラッグするたびに(ベクトルを作成することです) ) モデルはその位置から回転し続けます。

getFloatv を使用して mult を試してみましたが、モデルが開始点に戻り続けることに成功しませんでした。注:すべての関数でプッシュおよびポップマトリックスコマンドを使用したため、混乱は発生しません。本当の問題は、このクォートレイノンとマトリックス乗算を使用して互いに回転を追加する方法であると言えます。不足しているものはありますか?または何か置き忘れましたか?

ありがとう、

編集 :::::::::::::::: 更新されたコード:

ねえ、答えてくれてありがとう、でも私はまだ問題があります。回転が完了したときに if ステートメントを使用して multmatrix のみにしようとしましたが、連続した回転はありません。毎回最初にジャンプするだけです

glGetFloatv(GL_MODELVIEW_MATRIX,_oldRotationsQuatro);

glTranslatef(0.f,0.f,DRAWFARONZAXIS);

glClear(GL_COLOR_BUFFER_BIT |  GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); // Modeling transformation

glLoadIdentity();
glColor3d(1,1,1);

drawObject(model);

glRotated(model->getCurrRotatingAngle(),model->getRotatingAroundVector().getX(),
    model->getRotatingAroundVector().getY(),
    model->getRotatingAroundVector().getZ());

// if (end rotate)
    glMultMatrixf(_oldRotationsQuatro);

drawCamera();

glPopMatrix();

回転はいいけど超スピード…

編集 ありがとう、私は何かを考え出しました。glmultmatrix は思った通りに機能しないので、別のマトリックスを追加して、古い節約を使用しました。

ありがとう!

4

1 に答える 1

1

What you need to do is compute a rotation matrix offset from the angle/axis representation you have. When you stop dragging, you need to store this matrix as rotation in your model object. When you start dragging again, you first apply the rotation, and then the offset with glMultMatrix. When you stop dragging, you multiply offset onto rotation. Pseudo code:

  • Initialization: Set rotation to identity.
  • While dragging: Compute offset from axis/angle, glMultMatrix(rotation); glMultMatrix(offset).
  • Stop dragging: Set rotation = rotation * offset.
于 2013-05-25T11:17:42.160 に答える