私のコードには「単純な」問題があり、カメラが遠近法モードの場合はピッキングが完全に機能しますが、正射投影モードの場合は結果が奇妙になります。
これが私がやったことです:
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