GLScene을 사용하여 델파이 개체 (라인 또는 평면이면 충분 함)와 보이는 공간 사이의 교차점을 찾아 개체의 현재 부분을 확인해야합니다.
뷰 프러스 텀을 얻으려고했지만 어떻게 찾지 못했습니다. 카메라의 위치, 방향 및 시야를 사용하려고 생각했지만 MoveAroundTarget과 같은 메서드를 사용하거나 대상 객체를 설정할 때 업데이트되지 않는다고 생각됩니다.
감사합니다,
마르코GLScene의 절두체와 교차점 결정
2
A
답변
2
절두체를 얻으려면 ModelViewMatrix와 ProjectionMatrix를 TGLScene의 현재 버퍼에서 곱하여 얻은 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;
1
- 속성 NearPlane
, DepthOfView
, Position
, Direction
이 필요합니다,뿐만 아니라 'TGLSceneViewer.FieldOfView' .
TGLCamera에는 RayCastIntersect
이라는 유용한 방법이 있습니다.
방향이 바뀌지 않습니다. 예 : TGLCamera.MoveAroundTarget을 사용할 때 프로젝션 및 모델 뷰 matrices를 실험하고 있습니다. mat : MatrixMultiply (GLScene1.CurrentBuffer.ProjectionMatrix, GLScene1.CurrentBuffer.ModelViewMatrix); – mabi
올바른 행렬은 MatrixMultiply (GLScene1.CurrentBuffer.ModelViewMatrix, GLScene1.CurrentBuffer.ProjectionMatrix)입니다. 테스트를 정리할 때 일부 델파이 코드를 게시 할 것입니다. – mabi