-1

私は OpenGL 4.0 を使用しており、2 つのプロパティを持つゲーム カメラを作成しようとしています。「迎え角」と「回転」

Warcraft 3 や Starcraft II などの他の RTS ゲームと非常によく似たカメラを構築しようとしていますが、カメラ (デフォルトでは) はかなり急な角度で地面に面しています。

古いopengl glTranslatef、glRotatefと非常によく似た動作をするサポートコードを使用しています。現在の試みは次のようになります。

shaders->Model.Translate(-cameraPosition.x,-cameraPosition.y,-cameraPosition.z);
//Apply rotation
//shaders->Model.Rotate(rotation/M_PI*180.0f,0,0,1);

//Apply AOA
float aX = cos(2*3.141592 - rotation - 3.141592/2.0);
float aY = sin(2*3.141592 - rotation - 3.141592/2.0);
shaders->Model.Rotate(90.0f-(float)angleOfAttack/M_PI*180.0f,aY,aX,0);

その後、地面は (0,0,0) から (width,height,0) までの長方形として描画されます。この試みは、y が増加して地面が遠くなる場合を除いて、ほとんど機能します。何が原因なのかはわかりませんが、AOA を 90 に設定すると (カメラが真下を向いているため)、このコードが関係していると思われます。

注: 必要に応じてカメラの動きを処理するために、ビュー マトリックスの代わりにモデル マトリックスを使用しています。

4

1 に答える 1

0

理解した。ばかげた質問だと思います。トリックは、回転前ではなく、回転後に X、Y 変換を行うことでした

//Apply translation
shaders->Model.Translate(0,0,-cameraPosition.z);
//Apply rotation
//shaders->Model.Rotate(rotation/M_PI*180.0f,0,0,1);

//Apply AOA
float aX = cos(2*3.141592 - rotation - 3.141592/2.0);
float aY = sin(2*3.141592 - rotation - 3.141592/2.0);
shaders->Model.Rotate(90.0f-(float)angleOfAttack/M_PI*180.0f,aY,aX,0);

shaders->Model.Translate(-cameraPosition.x,-cameraPosition.y,0);
于 2013-10-27T21:29:06.720 に答える