0

OpenGL での手術用ロボット アームの動きについて質問があります。

私たちの腕は、腕の関節と思われる 7 つの部分で構成されており、腕を曲げたりひねったりする役割を担っています。このように腕を描きます: 最初に、肩を「上下」のように動かす要素を作成し、Translatef を使用して、肩をねじる次の要素を描画するポイントまで「移動」します ( Rotatef を使用して動きを制御し、次の関節 (肘、手首) で同様に制御します。

人間らしい動きができる腕を作るのがポイントです。私たちのメカニズムは機能しますが、チューターはアームの端でライン ストリップを描くように求めています。プッシュ マトリックスとポップ マトリックスの間に腕の描画と移動を担当するコードを配置したので、実際のように動作します。つまり、ソウルダーを動かすと、腕の他の要素も動きます。

移動、回転する多くの要素があり、制御できるさまざまな要素に接続されているいくつかの回転マトリックスがありますが、空間内のアームの端の新しい位置を正確に見つける方法がわかりませんラインストリップに新しいポイントを追加できます。誰でも助けることができますか?

    glGetFloatv(GL_MODELVIEW_MATRIX,mvm2);

     x=mvm2[12];
     y=mvm2[13];
     z=mvm2[14];

     glPointSize(5.0f);
     glColor3f(1.0f, 0.0f, 0.0f);

     glBegin(GL_POINTS);
     glVertex3f(x,y,z);
     glEnd();

watch を使用して x、y、z の値を確認したところ、(0,-1.16-12e,17.222222) が得られました。腕の長さは約 9.0 (z 軸上) であるため、真実ではありません。モデルビュー マトリックスの最後の列だけが重要だと思います。ここで描画を終了するので、頂点のローカル座標で (0,0,0) を乗算する必要はありません。

4

2 に答える 2

0

を使用することになっている場合、これは引数を指定glGetFloatvして呼び出すことを指しGL_MODELVIEW_MATRIX、現在のモデル ビュー マトリックスを返します。次に、この行列を使用して、点を手の座標系からワールド空間 CS に変換できます。

glGetFloatvただし、レンダリングのパフォーマンスが低下する可能性があるため、呼び出しは悪い習慣です。時代遅れの機能や非推奨の機能について教えることについて、家庭教師に相談する必要があると思います。教授に資料を更新してもらうことができるかもしれません。

編集:翻訳を取得するためのコードは正しいです。ただし、同じモデル ビュー マトリックスを適用して点を描画することはできません。描画する前に、glLoadIdentityまたは popping でモデル ビュー マトリックスをリセットする必要があります。

于 2013-05-13T17:54:33.057 に答える