2

私のコードには「単純な」問題があり、カメラが遠近法モードの場合はピッキングが完全に機能しますが、正射投影モードの場合は結果が奇妙になります。

これが私がやったことです:

void Ray::computeFromCamera(    const glm::vec3& position,
                                    const glm::mat4& modelView,
                                    const glm::mat4& projection,
                                    const glm::vec4& viewPort,
                                    float near,
                                    float far )
    {
        this->origin.computeFromCamera( glm::vec3( position.x, position.y, near ),
                                        modelView,
                                        projection,
                                        viewPort );

        this->direction.computeFromCamera(  glm::vec3( position.x, position.y, far ),
                                            modelView,
                                            projection,
                                            viewPort );
    }

オブジェクトを選択できるので、レイ コンピューティングは良さそうです。

これが私が結果で行うことです:

glm::vec3 start = interfactionCamera->ray.getOrigin();
glm::vec3 end   = interfactionCamera->ray.getDirection();

// Normalize direction.
glm::vec3 endNormalized(end - start);
endNormalized = glm::normalize(endNormalized);

最後のステップを実行すると、次のようになります。

正規化された方向なし:

  • 正投影カメラでOK
  • 遠近法カメラでは機能しません

正規化された方向:

  • 遠近法カメラでは機能しません
  • 正投影カメラでOK
4

0 に答える 0