저는 탄도 궤적과 FreeForm 메쉬의 세그먼트 사이의 교차점을 결정하기 위해 Delphi (XE2)에서 GLScene RayCastIntersect 함수를 사용하고 있습니다. 메쉬를 가져오고 RayCastIntersect 함수를 사용하면 교차점이 올바르게보고됩니다. 그러나 FreeForm 객체를 양수 x 좌표로 변환하면 함수는 올바른 교차점을 반환하지 않습니다. 반환 된 교차점은 항상 대상 (즉, 올바른 충돌 지점 앞, x = 0 주변)에 있습니다. FreeForm이 x < = 0이면 RayCastIntersect 함수는 다른 모든 변환과 회전을 올바르게 처리합니다.GLScene FreeForm RayCastIntersect 문제
FreeForm의 개별 MeshObject에서 x 변환을 수행하면 RayCastIntersection 함수는 양수 x 변환에 대해서도 올바른 교차점을 반환한다는 것을 알아 챘습니다. 불행히도 개별 메쉬 개체를 회전하는 방법이 없으므로이를 해결 방법으로 사용할 수 없습니다.
누구든지이 문제를 겪었습니까? 그것은 알려진 버그입니까 (비록 그것에 대해 온라인으로 아무것도 찾지 못했습니까?)? 아니면 내가 잘못하고있는거야? 어떤 제안이라도 감사하게 생각합니다. 내 Check Impact 코드는 아래를 참조하십시오.
function ChkImpact(Mesh: TGLFreeForm; x1, x2, y1, y2, z1, z2: Double): Boolean;
var
rStrt, rVect, rEnd: TVector;
dx, dy, dz: Double;
iPoint, iNorm: TVector;
begin
//***Check trajectory secgment intersection with target mesh***//
rStrt := VectorMake(x1,y1,z1,0);
rEnd := VectorMake(x2,y2,z2,0);
dx := x2-x1;
dy := y2-y1;
dz := z2-z1;
rVect := VectorMake(dx,dy,dz,1);
if Mesh.{Octree}RayCastIntersect(rStrt, rVect, @iPoint, @iNorm) then
begin
iPtX := iPoint.X;
iPtY := iPoint.Y;
iPtZ := iPoint.Z;
Result := PointOnSegment(iPoint, rStrt, rEnd);
end
else Result := False;
end;
function PointOnSegment(P, P1, P2: TVector): Boolean;
begin
//***Check whether impact point is on the trajectory segment***//
if ((P.X >= P1.X) and (P.X <= P2.X)) then Result := True else Result := False;
end;