2

カメラの位置に対してオブジェクトの位置を変更する必要があります。つまり、オブジェクトは常にカメラのすぐ前にある必要があります。カメラの動きに追従する必要があります。オブジェクト描画機能を追加するには何が必要ですか?

4

2 に答える 2

2

古いスタイルの固定関数マトリックスを使用している場合、オブジェクトをカメラに対して相対的に配置する最も簡単な方法は、カメラ マトリックスをスタックから削除した後で行うことです。たとえば、次のようなマトリックス セットアップがあるとします。

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(...); //Or other camera functions.
for(/*each object*/)
{
  glPushMatrix();
   //Setup object matrices.
  glTranslatef();
  glRotatef();

  //Setup object rendering.
  glDrawElements(); //Draw the object

  glPopMatrix();
}

次に、これを次のように切り替えます。

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
gluLookAt(...); //Or other camera functions.
for(/*each object*/)
{
  glPushMatrix();
   //Setup object matrices.
  glTranslatef();
  glRotatef();

  //Setup object rendering.
  glDrawElements(); //Draw the object

  glPopMatrix();
}
glPopMatrix(); //Remove camera matrix. MODELVIEW is now identity.
for(/*each camera-relative object*/)
{
  glPushMatrix();
   //Setup object matrices.
  glTranslatef();
  glRotatef();

  //Setup object rendering.
  glDrawElements(); //Draw the object

  glPopMatrix();
}

シェーダーを使用している場合、これはさらに簡単です。マトリックス スタックがある場合は、ここに表示されているのと同じスタック ベースの操作を行うだけです。マトリックスを構築するために何か他のことをしている場合は、カメラマトリックスを変換に考慮しないでください。

于 2012-11-22T19:01:04.877 に答える
1

オブジェクトの位置は常に次のようになります。

desiredPosition = cameraPosition + cameraDirection * offset;
于 2012-11-22T18:42:12.630 に答える