www.pudn.com > VC中OpenGL编程实现虚拟现实.rar > House.h, change:2003-04-07,size:3365b


// House.h: interface for the CHouse class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_HOUSE_H__4BED759B_C851_4A1D_9BCB_1A2C6AAACBA1__INCLUDED_) 
#define AFX_HOUSE_H__4BED759B_C851_4A1D_9BCB_1A2C6AAACBA1__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
/*	This Code Creates Our OpenGL Window.  Parameters Are:					* 
*	title			- Title To Appear At The Top Of The Window				* 
*	width			- Width Of The GL Window Or Fullscreen Mode				* 
*	height			- Height Of The GL Window Or Fullscreen Mode			* 
*	bits			- Number Of Bits To Use For Color (8/16/24/32)			* 
*	fullscreenflag	- Use Fullscreen Mode (TRUE) Or Windowed Mode (FALSE)	*/ 
 
#define MAX_TEX  20 
 
#define	CHARS	signed	 char		/* 1 byte signed char	*/ 
#define	CHARU	unsigned char		/* 1 byte unsigned char	*/ 
#define	INT2S	signed   short		/* 2 byte signed int	*/ 
#define INT2U	unsigned short		/* 2 byte unsigned int	*/ 
#define	INT4S	signed   long		/* 4 byte signed int	*/ 
#define	INT4U	unsigned long		/* 4 byte unsigned int	*/ 
#define INT8U	unsigned long	long	/* 8 byte unsigned int	*/ 
#define	FLOAT	float			/* 4 byte 		*/ 
 
// 鼠标移动方向 
#define FORWARD 1 
#define UP 2 
#define LOOKHORIZONTAL 3 
#define LOOKVERTICAL 5 
 
// 纹理信息 
typedef struct _tagTexture2D 
{ 
    char	fname[30]; 
    INT2U	type;	 // GL_CLAMP 或者 GL_REPEAT 
}   TEXTURE2D; 
 
// 3D点信息 
typedef struct _tagPoint3D      
{ 
    FLOAT	x, y, z;	// 三维坐标 
    FLOAT	r, g, b;	// 颜色 
    FLOAT	u, v;		// 纹理坐标 
}   POINT3D; 
 
// 物体表面信息 
typedef struct _tagSurface		 
{ 
    INT4U	pointn;		// 点个数 
    INT4U	triangle;	// 三角形个数 
    INT4U	quadric;	// 方形个数 
    POINT3D	*pointlist;	// 点列表 
    INT4U	*patchlist;	// 路径列表 
    INT4U	texId;	    // 纹理ID号    
}   SURFACE; 
 
// 对象信息 
typedef struct _tagObject	 
{ 
    INT4U	SurfNum;    // 面个数 
    SURFACE	*surflist; 	// 面列表 
}   OBJECT; 
 
// 观察位置信息,Angle-观察角,Near-观察距离, 
// (ex, ey, ez)-眼睛坐标,(cx, cy, cz)-被观察点坐标; 
typedef struct _tagViewPos 
{ 
    float	Angle, Near, ex, ey, ez, cx, cy, cz;   
}   VIEWPOS; 
 
class CHouse   
{ 
public: 
	CHouse(); 
	virtual ~CHouse(); 
 
	void    ChangeViewPos(int type, GLfloat amount); // 当观察点改变时重新绘制场景的函数 
    void	InitHouseTexture( int TexIndex );  // 创建房屋纹理 
    void    LoadHouseTexture();// 加载房屋纹理位图数据 
    void    FreeHouseTexture();// 释放房屋纹理 
    void    FreeHouseData();   // 释放房屋三维数据  
    BOOL    GetHouseData();    // 读取House.dat,得到房屋三维数据 
    unsigned char* LoadHouseBMP(INT2U TexIndex, INT2U *rslx, INT2U *rsly ); // 加载房屋纹理位图文件 
    void    InitDraw();              // 设置绘制房屋所需参数 
    void    Draw(void);              // 绘制房屋 
 
	TEXTURE2D    **m_TextureList;    // 纹理列表 
    OBJECT	      *m_ObjectList;	 // 对象列表	/* m_ObjectList[0]:isolated surfaces*/ 
    INT4S         m_nObjectNum;      // 对象个数 
    char          m_cHouseDataFile[30];  // 房屋数据文件名 
 
	unsigned char  *m_BMPData[MAX_TEX];   // 纹理位图文件数据 
    INT2U m_nTextureWidth[MAX_TEX], m_nTextureHeight[MAX_TEX]; // 纹理宽度和高度 
    int   m_nTextureNum;   // 纹理个数 
	VIEWPOS  m_ViewPos;    // 观察点参数 
}; 
 
#endif // !defined(AFX_HOUSE_H__4BED759B_C851_4A1D_9BCB_1A2C6AAACBA1__INCLUDED_)