本文整理汇总了C++中CFrustum::CreateFromPoints方法的典型用法代码示例。如果您正苦于以下问题:C++ CFrustum::CreateFromPoints方法的具体用法?C++ CFrustum::CreateFromPoints怎么用?C++ CFrustum::CreateFromPoints使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CFrustum
的用法示例。
在下文中一共展示了CFrustum::CreateFromPoints方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MK_Frustum
void MK_Frustum(CFrustum& F, float FOV, float _FAR, float A, Fvector &P, Fvector &D, Fvector &U)
{
float YFov = deg2rad(FOV);
float XFov = deg2rad(FOV/A);
// calc window extents in camera coords
float wR=tanf(XFov*0.5f);
float wL=-wR;
float wT=tanf(YFov*0.5f);
float wB=-wT;
// calc x-axis (viewhoriz) and store cop
// here we are assuring that vectors are perpendicular & normalized
Fvector R,COP;
D.normalize ();
R.crossproduct (D,U);
R.normalize ();
U.crossproduct (R,D);
U.normalize ();
COP.set (P);
// calculate the corner vertices of the window
Fvector sPts[4]; // silhouette points (corners of window)
Fvector Offset,T;
Offset.add (D,COP);
sPts[0].mul(R,wR);
T.mad(Offset,U,wT);
sPts[0].add(T);
sPts[1].mul(R,wL);
T.mad(Offset,U,wT);
sPts[1].add(T);
sPts[2].mul(R,wL);
T.mad(Offset,U,wB);
sPts[2].add(T);
sPts[3].mul(R,wR);
T.mad(Offset,U,wB);
sPts[3].add(T);
// find projector direction vectors (from cop through silhouette pts)
Fvector ProjDirs[4];
ProjDirs[0].sub(sPts[0],COP);
ProjDirs[1].sub(sPts[1],COP);
ProjDirs[2].sub(sPts[2],COP);
ProjDirs[3].sub(sPts[3],COP);
Fvector _F[4];
_F[0].mad(COP, ProjDirs[0], _FAR);
_F[1].mad(COP, ProjDirs[1], _FAR);
_F[2].mad(COP, ProjDirs[2], _FAR);
_F[3].mad(COP, ProjDirs[3], _FAR);
F.CreateFromPoints(_F,4,COP);
}