歩く地面を表すグリッドを作成しました。
ビューを回転/移動するために矢印キーをリンクしました。
switch(currentKey)
{
case sf::Key::Up:
z_trans+=1;
break;
case sf::Key::Down:
z_trans-=1;
break;
case sf::Key::Left:
y_angle-=0.5;
break;
case sf::Key::Right:
y_angle+=0.5;
break;
}
z_trans は z の平行移動、y_angle は glRotatef() の y 軸の回転です。
「キャラクター」が前に歩いて左右に曲がってから、彼が向いている方向にまっすぐ歩き続けることができます。唯一の問題は、原点 (0,0,0) から離れると、カメラではなく原点の周りで回転が発生することです。したがって、原点から 100 ユニット離れている場合、キャラクターは基本的に半径 100 の円のパスをたどります。
gluLookAt を使用せずに、これを実装する方法を知っている人はいますか? 完全に困惑し、それを理解しようとしてここに2時間座っていました。
完全なコード:
float elapsedTime=Clock.GetElapsedTime();
if(elapsedTime>REFRESH_RATE){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(x_trans, y_trans, z_trans); // y_trans == -25.f to keep us above the plane
glRotatef(x_angle,1,0,0);
glRotatef(y_angle,0,1,0);
glRotatef(z_angle,0,0,1);
currentKey=sf::Key::Num9;
if (Event.Type == sf::Event::KeyPressed) currentKey = Event.Key.Code;
switch(currentKey)
{
case sf::Key::Up:
z_trans+=1;
break;
case sf::Key::Down:
z_trans-=1;
break;
case sf::Key::Left:
y_angle-=0.5;
break;
case sf::Key::Right:
y_angle+=0.5;
break;
}
drawGrid();
Clock.Reset();
}