質問

現在表示されて、このオブジェクトのどの部分を決定するために、オブジェクト(線または平面は十分である)と可視領域との交点を見つけるデルファイ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プロパティ)のうち、錐台取得することができます - プロパティNearPlaneDepthOfViewPositionを、Directionは、同様に「TGLSceneViewer.FieldOfView」など、必要とされるであろう。

TGLCameraも有用であろうRayCastIntersectと呼ばれる方法があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top