2009-12-30 3 views
2

GLScene을 사용하여 델파이 개체 (라인 또는 평면이면 충분 함)와 보이는 공간 사이의 교차점을 찾아 개체의 현재 부분을 확인해야합니다.
뷰 프러스 텀을 얻으려고했지만 어떻게 찾지 못했습니다. 카메라의 위치, 방향 및 시야를 사용하려고 생각했지만 MoveAroundTarget과 같은 메서드를 사용하거나 대상 객체를 설정할 때 업데이트되지 않는다고 생각됩니다.
감사합니다,
마르코GLScene의 절두체와 교차점 결정

당신은 카메라 개체 (TGLSceneViewer.Camera 속성)에서 절두체를 얻을 수

답변

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이라는 유용한 방법이 있습니다.

+1

방향이 바뀌지 않습니다. 예 : TGLCamera.MoveAroundTarget을 사용할 때 프로젝션 및 모델 뷰 matrices를 실험하고 있습니다. mat : MatrixMultiply (GLScene1.CurrentBuffer.ProjectionMatrix, GLScene1.CurrentBuffer.ModelViewMatrix); – mabi

+0

올바른 행렬은 MatrixMultiply (GLScene1.CurrentBuffer.ModelViewMatrix, GLScene1.CurrentBuffer.ProjectionMatrix)입니다. 테스트를 정리할 때 일부 델파이 코드를 게시 할 것입니다. – mabi