GLSceneで錐台との交点を決定します
質問
現在表示されて、このオブジェクトのどの部分を決定するために、オブジェクト(線または平面は十分である)と可視領域との交点を見つけるデルファイIニーズにGLSceneを使用。
私は、ビューの錐台を取得しようとしたが、私はどのように見つけることができませんでした。私は、カメラの位置、方向、視野を使用して考えていたが、私はMoveAroundTargetようなメソッドを使用して、またはターゲットオブジェクトを設定する際に、それらが更新されていない疑いがある。
おかげで、
マルコ
解決
あなたはModelViewMatrixとTGLSceneの現在のバッファからProjectionMatrixをmultipying得ModelViewProjection行列を使用することができ錐台を取得します。マトリックスから飛行機を取得するにExtractFrustumFromModelViewProjection関数を使用します。ここでは、コードスニペットがあります:
var
matMVP: TMatrix;
frustum : TFrustum;
intersectPoint : TVector;
begin
// get the ModelViewProjection matrix
matMVP:=MatrixMultiply(GLScene1.CurrentBuffer.ModelViewMatrix, GLScene1.CurrentBuffer.ProjectionMatrix);
// extract frustum
frustum:=ExtractFrustumFromModelViewProjection(matMVP);
// calculate intersection between left plane and line passing through GLArrowLineX object
if (IntersectLinePlane(GLArrowLineX.Position.AsVector,GLArrowLineX.Direction.AsVector, frustum.pLeft, @intersectPoint)=1)
then begin
// do something with intersectPoint
end else begin
// no intersection point (parallel or inside plane)
end;
end;
他のヒント
あなたはカメラオブジェクト(TGLSceneViewer.Cameraプロパティ)のうち、錐台取得することができます - プロパティNearPlane
、DepthOfView
、Position
を、Direction
は、同様に「TGLSceneViewer.FieldOfView」など、必要とされるであろう。
TGLCameraも有用であろうRayCastIntersect
と呼ばれる方法があります。
所属していません StackOverflow