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_)