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的点积。
▲可以形象认为Plane将空间分成两部分,在Plane上任选一点出发作出其法线,则法线所在的空间规定为正空间,另一半空间规定为负空间。 ▲以+Z作为法线举例,则W=0时,平面就是XOY平面;当W>0时,平面沿+Z分布;当W<0时,平面沿-Z分布。
▼下面分析几个FPlane的API的数学原理
|