72578


提示コードの////コメントで囲ってるある部分ですが**「
人工衛星のようにカメラが物体(地球)を周回軌道のように移動してる時に物体をずっと見続けるプログラムを作りたい
」**のですがどうすれば実装できるのでしょうか？提示画像ではカメラの座標は周回軌道していますが視点が物体を見続けていないのでおかしな感じになっています。

[![画像の説明をここに入力](https://i.stack.imgur.com/hPaST.png)](https://i.stack.imgur.com/hPaST.png)

[code]

        //アップデート
        void Game::Update()
        {
            
            if (true) {
                //if (mUpKey == true || mDownKey == true) {
                printf("camera: %.2f, %.2f, %.2f \n\n", camera->getPosition().x, camera->getPosition().y, camera->getPosition().z);
                printf("Center: %.2f, %.2f, %.2f \n\n", camera->getCenter().x, camera->getCenter().y, camera->getCenter().z);
        
        
        
            //    glm::vec3 cc = mh->getPosition() - camera->getPosition();
               
        
                glm::vec3 c = camera->getPosition() - mPrev_pos;
        
        //        glm::vec3 c = cc  - mPrev_pos;
                
                glm::qua<float> P(0, camera->getPosition().x, camera->getPosition().y, camera->getPosition().z);
        
                glm::vec3 v(0.0f, -1.0f, 0.0f);    //回転する向き
                glm::qua<float> Q(cos((PI * 180 * speed) / 2.0f), glm::dot(v.x, sin((PI * 180 * speed) / 2.0f)), glm::dot(v.y, sin((PI * 180 * speed) / 2.0f)), glm::dot(v.z, sin((PI * 180 * speed) / 2.0f)));
                glm::qua<float> R(cos((PI * 180 * speed) / 2.0f), glm::dot(-v.x, sin((PI * 180 * speed) / 2.0f)), glm::dot(-v.y, sin((PI * 180 * speed) / 2.0f)), glm::dot(-v.z, sin((PI * 180 * speed) / 2.0f)));
        
                glm::qua<float> f = (R * P * Q);
                glm::vec3 w(0, 0, 0);
                w.x = f.x;
                w.y = f.y;
                w.z = f.z;
        
                camera->setMove( w + c );
        //////////////////////////////////////////////////////////////
                camera->setCenter(glm::normalize(mh->getPosition() - camera->getPosition()));
        //////////////////////////////////////////////////////////////
    mPrev_pos = camera->getPosition();
            }
        
        
        
        
            mh->Update();
            KeyInput(); //キー入力
        }
    
[/code]


CC BY-SA 4.0
2020-12-10T13:14:54.413
72572
2020-12-11T01:50:00.073
2020-12-11T00:14:49.477
question
c++
人工衛星のようなカメラ移動を実装したが注視点をずっと物体を見続けるプログラムをしたい。


[![画像の説明をここに入力](https://i.stack.imgur.com/J5Mhv.png)](https://i.stack.imgur.com/J5Mhv.png)

上の図の矢印はカメラを表していて、矢印が向いている方向にレンズを向けていることを表しています。

地球の周り回るカメラを、ずっと地球の方向に向けておくには、回った角度と同じだけカメラの向きを変える必要があります（図は９０度回った時の例です）。

質問のプログラムで、カメラの居る位置（地球から見た角度）は"PI * 180 * speed"
で計算されていますから、それを使ってカメラの向きを変更するようにすれば良いと思います。


CC BY-SA 4.0
2020-12-11T01:50:00.073
72578
2020-12-11T01:50:00.073
217
72572
answer