我们知道3D平面是由3点构建的。 现在在delphi中我使用GLScene,有一个平面,你无法看到任何点来创建一个计划。我的问题是如何通过3个给定点设置飞机。 根据SO规则,我编写了我的TGLPlane源代码。
TGLPlane = class(TGLSceneObject)
private
{ Private Declarations }
FXOffset, FYOffset: TGLFloat;
FXScope, FYScope: TGLFloat;
FWidth, FHeight: TGLFloat;
FXTiles, FYTiles: Cardinal;
FStyle: TGLPlaneStyles;
FMesh: array of array of TVertexRec;
protected
{ Protected Declarations }
procedure SetHeight(const aValue: Single);
procedure SetWidth(const aValue: Single);
procedure SetXOffset(const Value: TGLFloat);
procedure SetXScope(const Value: TGLFloat);
function StoreXScope: Boolean;
procedure SetXTiles(const Value: Cardinal);
procedure SetYOffset(const Value: TGLFloat);
procedure SetYScope(const Value: TGLFloat);
function StoreYScope: Boolean;
procedure SetYTiles(const Value: Cardinal);
procedure SetStyle(const val: TGLPlaneStyles);
public
{ Public Declarations }
constructor Create(AOwner: TComponent); override;
procedure Assign(Source: TPersistent); override;
procedure BuildList(var rci: TRenderContextInfo); override;
function GenerateSilhouette(const silhouetteParameters
: TGLSilhouetteParameters): TGLSilhouette; override;
function AxisAlignedDimensionsUnscaled: TVector; override;
function RayCastIntersect(const rayStart, rayVector: TVector;
intersectPoint: PVector = nil; intersectNormal: PVector = nil)
: Boolean; override;
{ : Computes the screen coordinates of the smallest rectangle encompassing the plane.<p>
Returned extents are NOT limited to any physical screen extents. }
function ScreenRect(aBuffer: TGLSceneBuffer): TGLRect;
{ : Computes the signed distance to the point.<p>
Point coordinates are expected in absolute coordinates. }
function PointDistance(const aPoint: TVector): Single;
published
{ Public Declarations }
property Height: TGLFloat read FHeight write SetHeight;
property Width: TGLFloat read FWidth write SetWidth;
property XOffset: TGLFloat read FXOffset write SetXOffset;
property XScope: TGLFloat read FXScope write SetXScope stored StoreXScope;
property XTiles: Cardinal read FXTiles write SetXTiles default 1;
property YOffset: TGLFloat read FYOffset write SetYOffset;
property YScope: TGLFloat read FYScope write SetYScope stored StoreYScope;
property YTiles: Cardinal read FYTiles write SetYTiles default 1;
property Style: TGLPlaneStyles read FStyle write SetStyle
default [psSingleQuad, psTileTexture];
end;
答案 0 :(得分:0)
在GLScene中,平面由其位置和方向决定,而不是直接由三个点确定。
让我们标记A,B和C点。选择A作为位置。向量AB和AC的叉积将给出法向量。使用这些结果设置平面的AbsolutePosition
和AbsoluteDirection
属性。