提示コードのここですのコメント部の二行ですが
質問1、現在はコードでは原点中心に回転するコードになっており自分のやりたいことは原点ではなく
物体を中心に回転してほしいので物体Pの座標を中心に回転するにはどうすればいいのでしょうか?
質問2 また視点である二行目はどうすれば常に物体を見つめるという状態を作れるのでしょうか?
回転は実装できましたがその後がわからなく参考サイトではそのあたりの回答がないので困っています。
参考サイト: https://teratail.com/questions/251067
cpp
1//アップデート 2void Game::Update() 3{ 4 5 printf("camera: %.2f, %.2f, %.2f \n\n",camera->getPosition().x, camera->getPosition().y, camera->getPosition().z); 6 7 // glm::qua<float> P(0, mh->getPosition().x, mh->getPosition().y, mh->getPosition().z); 8 glm::qua<float> P(0, camera->getPosition().x, camera->getPosition().y, camera->getPosition().z); 9 10 11 printf("P.x: %.2f\n", P.x); 12 printf("P.y: %.2f\n", P.y); 13 printf("P.z: %.2f\n\n\n", P.z); 14 15 16 17 glm::vec3 v(0.0f,-1.0f,0.0f); //回転する向き 18 glm::qua<float> Q(cos((PI_ * speed) / 2.0f), glm::dot(v.x, sin((PI_ * speed) / 2.0f)), glm::dot(v.y, sin((PI_ * speed) / 2.0f)), glm::dot(v.z, sin((PI_ * speed) / 2.0f))); 19 glm::qua<float> R(cos((PI_ * speed) / 2.0f), glm::dot( -v.x, sin((PI_ * speed) / 2.0f)), glm::dot(-v.y, sin((PI_ * speed) / 2.0f)), glm::dot(-v.z, sin((PI_ * speed) / 2.0f))); 20 21 glm::qua<float> f = (R * P * Q); 22 23 glm::vec3 w(0,0,0); 24 25 w.x = f.x; 26 w.y = f.y; 27 w.z = f.z; 28 29 /* 30 printf("w.x: %.2f\n", w.x); 31 printf("w.y: %.2f\n", w.y); 32 printf("w.z: %.2f\n\n\n", w.z); 33 */ 34 35 // ここのコード 36 camera->setMove( w ); 37 //camera->setCenter( mh->getPosition()); 38 39 40 41 //camera->setMove(pos); 42 mh->Update(); 43 44 KeyInput(); //キー入力 45} 46
いつか見たことある質問だなと思ったら4月まで遡ってしまいました
[C++ - クォータニオンによる中心点を中心にラジアン度カメラを回転する視点移動を実装したい。原点の算出法など|teratail](https://teratail.com/questions/251067 )
> モ○ハンなどで右スティックを動かすと視点がキャラクタを中心に回るあのカメラ回転
たまに,このように物事を説明する人がいるけど,特定のタイトルを挙げても万人には伝わらないのだから,きちっと物事を定義した方が良いと思う.(実際,知らないし)
で,以下,確認事項:
・カメラ(視点)の位置というのは,常に キャラクタの位置を中心とした(固定半径の?)円の周上にあるのでしょうか?
言い換えれば,カメラの位置というのは,キャラクタの位置とある角度θが与えられれば確定できるのでしょうか?
・カメラが向く方向というのは,カメラの位置とキャラクタの位置だけから定まるのでしょうか?
上記が共にYesであれば,カメラの位置と姿勢というのはキャラクタ位置とθとから直接求められる話であろうと思うので,クォータミオンがどうのとか言わずに,直に求めてしまう方が楽なのではないか,と.
タイトルを文章を修正しました。
回答2件
あなたの回答
tips
プレビュー