#130 FPlane相关   UE4     vector     5 years ago (owner) Document
FPlane结构体定义在Engine/Source/Runtime/Core/Public/Math/Plane.h
 MS_ALIGN(16) struct FPlane
 	: public FVector
 {
 public:
 	/** The w-component. */
 	float W;
 }
▲这是FPlane的数据成员的构成:由X、Y、Z、W构成。
▼下面的几个典型的构造函数可以看出这四个数据成员的意义:
 FORCEINLINE FPlane::FPlane(float InX, float InY, float InZ, float InW)
 	:	FVector(InX,InY,InZ)
 	,	W(InW)
 {}
 FORCEINLINE FPlane::FPlane(FVector InNormal, float InW)
 	:	FVector(InNormal)
 	,	W(InW)
 {}
 FORCEINLINE FPlane::FPlane(FVector InBase, const FVector &InNormal)
 	:	FVector(InNormal)
 	,	W(InBase | InNormal)
 {}
 FORCEINLINE FPlane::FPlane(FVector A, FVector B, FVector C)
 	:	FVector(((B-A)^(C-A)).GetSafeNormal())
 {
 	W = A | (FVector)(*this);
 }
▲可以清楚的看到,X、Y、Z存储的是Plane的Normal,W存储的是Plane上的一点与Normal的点积。由这个点积除以Normal,就可以还原出Plane上的这个点坐标。 当W=0时,表明该Plane过原点;当W>0时,表明Plane正空间不包含原点;当W<0时,表明Plane正空间包含原点。
▲可以形象认为Plane将空间分成两部分,在Plane上任选一点出发作出其法线,则法线所在的空间规定为正空间,另一半空间规定为负空间。
▲以+Z作为法线举例,则W=0时,平面就是XOY平面;当W>0时,平面沿+Z分布;当W<0时,平面沿-Z分布。
▼下面分析几个FPlane的API的数学原理