⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zfrustum.h

📁 《3D游戏编程》随书光盘 12章: 设计阴影的多种技巧, 有详细源代码
💻 H
字号:
#ifndef _ZFRUSTUM_H_
#define _ZFRUSTUM_H_

#include <d3d9.h>
#include <d3dx9.h>

/// 即使不包含在平截头体内,稍微增加参数,使之包含在平截头体内的值
#define PLANE_EPSILON	5.0f

/**
 * 进行平截头体卷起的类
 *
 */
class ZFrustum
{
	D3DXVECTOR3	m_vtx[8];	/// 构成平截头体的8个顶点
	D3DXVECTOR3	m_vPos;		/// 当前摄像机的世界坐标
	D3DXPLANE	m_plane[6];	/// 构成平截头体的6个平面

public:
	/// 创建者
	ZFrustum();
	
	/// 输入摄像机(view)*投影矩阵,得到6个平面.
	BOOL	Make( D3DXMATRIXA16* pmatViewProj );

	/// 点v在平截头体内,返回TRUE,不在平截头体内,返回FALSE.
	BOOL	IsIn( D3DXVECTOR3* pv );

	/** 具有中心圆点(v)和半径(radius)的边界球体(bounding sphere)在平截头体内,
	 *  返回TRUE,不在平截头体内,返回FALSE.
	 */
	BOOL	IsInSphere( D3DXVECTOR3* pv, float radius );

	/// 在画面绘制平截头体.
	BOOL	Draw( LPDIRECT3DDEVICE9 pDev );

	/// 得到当前摄像机的世界坐标.
	D3DXVECTOR3*	GetPos() { return &m_vPos; }
};

/// 直接求得平面方程式的函数,现在没有在使用.
void ZMakePlane( D3DXPLANE* pPlane, D3DXVECTOR3* pv0, D3DXVECTOR3* pv1, D3DXVECTOR3* pv2 );

#endif // _ZFRUSTUM_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -