2017-10-31 26 views
1

私は別のオブジェクトの周りを回転し、それを見ているシーングラフにカメラオブジェクトを持っています。別のオブジェクトの周りのオブジェクトを回転する

これまでのところ、私がその位置を翻訳しようとしたコードでは、それを前後に動かして少量しか戻せません。

//ang is set to 75.0f 
camera.position += camera.right * glm::vec3(cos(ang * deltaTime), 1.0f, 1.0f); 

私が間違っているつもりだところ、私は本当にわからない。ここで

は、私は私のゲーム更新ループ内で使用して試したコードです。私はオブジェクトの周りを回転する他のコードを見てきましたが、それらはcosとsineを使用していますが、x軸に沿って翻訳しているだけなので、これだけ必要と思っていました。

答えて

1

まず、回転ベクトルを作成する必要があります。これはglm::rotateZによって行うことができます。 glmバージョン0.9.6以降、角度はラジアンで設定する必要があります。

float ang   = ....; // angle per second in radians 
float timeSinceStart = ....; // seconds since the start of the animation 
float dist   = ....; // distance from the camera to the target 

glm::vec3 cameraVec = glm::rotateZ(glm::vec3(dist, 0.0f, 0.0f), ang * timeSinceStart); 

さらに、カメラが回るべきポイントを知る必要があります。おそらくオブジェの位置:

glm::vec3 objectPosition = .....; // position of the object where the camera looks to 

カメラの新たな位置は、回転ベクトルだけ変位、物体の位置である。

camera.position = objectPosition + cameraVec; 

カメラのターゲットはオブジェクトでなければなりません位置、カメラが物体に目を向ける必要があるため:

camera.front = glm::normalize(objectPosition - camera.position); 

カメラのupベクトルがz軸(回転軸)であるべきである。

camera.up = glm::vec3(0.0f, 0.0f, 1.0f); 
+0

は、私は位置、フロントとアップベクトルを持って、camera.targetを持っていけないと – rshah

+0

がOK @rshah、私は答えを編集したビュー行列を計算するためにそれらを使用します – Rabbid76

関連する問題