Question

à l'aide GLScene dans delphi Je dois trouver l'intersection entre un objet (une ligne ou un plan est suffisant) et l'espace visible, afin de déterminer quelle partie de cet objet est présente actuellement.
J'ai essayé d'obtenir la vue mais frustum je ne pouvais pas trouver comment. Je pensais à l'aide de la caméra la position, la direction et le champ de vision, mais je pense qu'ils ne sont pas mis à jour lors de l'utilisation des méthodes telles que MoveAroundTarget ou réglage de l'objet cible.
Merci,
Marco

Était-ce utile?

La solution

Pour obtenir le tronc de cône, vous pouvez utiliser la matrice ModelViewProjection obtenue multipying la ModelViewMatrix et la ProjectionMatrix du tampon courant de TGLScene. Pour obtenir les plans de la matrice utilisent la fonction ExtractFrustumFromModelViewProjection. Voici un extrait de code:

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;

Autres conseils

Vous pouvez obtenir de tronc de cône l'objet caméra (propriété TGLSceneViewer.Camera) - les propriétés NearPlane, DepthOfView, Position, Direction seront nécessaires, ainsi que « TGLSceneViewer.FieldOfView ».

Le TGLCamera a aussi une méthode appelée RayCastIntersect qui peut se révéler utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top