资源简介
本系统绘制了一个真实感的三维场景,并实现场景漫游。使用按键↑、↓、←、→或W、S、A、D控制运动方向,PgDn和PgUp可以改变观察者的高度,鼠标控制转向,按键‘F’可以打开和关闭“雾气”,Esc退出程序。
本场景中绘制了墙壁与地面、天空、石柱、箱子、玻璃球、雪人、雾等对象。
代码片段和文件信息
#include
#include
#include
#include
#include
#pragma comment( lib “opengl32.lib“)
#pragma comment( lib “glu32.lib“)
#pragma comment( lib “glaux.lib“)
#define KEY_DOWN(vk_code)((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
HDC hDC=NULL;
HGLRC hRC=NULL;
HWND hWnd=NULL;
HINSTANCE hInstance;
bool keys[256];
bool active=TRUE;
bool fullscreen=TRUE;
int SCREEN_WIDTH =800;//屏幕宽
int SCREEN_HEIGHT =600;//屏幕高
GLfloat theta = 0.0f; //左右旋转角度
GLfloat viewUp = 0.0f;//向上和向下程度
GLfloat speed = 0.23f;//运动速度
GLfloat dis=10;//碰撞检测保留距离
GLfloat viewAtPosition[3];//观察目标位置
GLfloat eyePosition[3] = {0.0f 40.0f 0.0f}; //视点初始位置
GLfloat Matblack[]= {0.0f 0.0f 0.0f 1.0f};
GLfloat Matwhite[]= {0.7f 0.7f 0.7f 1.0f};
GLfloat Matred[]= {0.6f 0.0f 0.0f 1.0f};
GLfloat LightAmbient[]= {0.8f 0.8f 0.8f 1.0f};
GLfloat LightDiffuse[]= {1.0f 1.0f 1.0f 1.0f};
GLfloat LightPosition[]={1.0f 1.0f 1.0f 0.0f};
GLfloat mat_specular[] ={1.0f 1.0f 1.0f 1.0f};
GLfloat mat_shininess = 100; //高光度
GLfloat fogColor[4]= {0.5f 0.5f 0.5f 0.5f};//雾气颜色
GLuint texture[10];//纹理标识
GLUquadricObj *quadratic=gluNewQuadric();;//二次几何体
GLfloat rotate=0.0f;//石柱旋转角度
GLfloat roll=0;//云层移动量
GLfloat lightning=0;
bool thunder=true;//是否打雷
GLboolean fog=false;//是否开启雾化
bool fp;//F键是否按下
GLuint EnvTexture;//环境纹理
//*********************************************************************//
//接口集
void CollDetec(GLfloat &xGLfloat &z);
void SetViewByMouse();
void Camera();
AUX_RGBImageRec *LoadBMP(char *Filename);
int LoadGLTextures();
GLuint EmptyTexture();
int InitGL(GLvoid);
void DrawCave();
void DrawBox();
void DrawSnowMan();
void Drawcylinder();
void DrawGlassBall();
void DrawSky();
int DrawGLScene(GLvoid);
GLvoid ReSizeGLScene(GLsizei width GLsizei height);
GLvoid KillGLWindow(GLvoid);
BOOL CreateGLWindow(char* title int width int height int bits bool fullscreenflag);
LRESULT CALLBACK WndProc(HWND UINT WPARAM LPARAM);
//*********************************************************************//
//改变宽口大小
GLvoid ReSizeGLScene(GLsizei width GLsizei height)
{
if (height==0)
{
height=1;
}
glViewport(00widthheight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f(GLfloat)width/(GLfloat)height0.1f1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
//碰撞检测防止视点穿过物体
void CollDetec(GLfloat &xGLfloat &z)
{
if (x<-(50-dis))x= -(50-dis);//房间
if (x> (50-dis))x= 50-dis;
if (z<-(300-dis))z= -(300-dis);
if (z> (300-dis))z= 300-dis;
if (z>=-170&&z<=-150&&x>(30-dis)&&eyePosition[1]<=60)x=30-dis;//箱子与玻璃球
if (x>=30&&z>=-170&&z<-(150-dis)&&eyePosition[1]<=60)z=-(150-dis);
if (x>=30&&z<=-150&&z>-(170+dis)&&eyePosition[1]<=60)z=-(170+dis);
if (z>=150&&z<=170&&x<-(30-dis)&&eyePosition[1]<=55) x=-(30-dis);//雪人
if (x<=-30&&z<=170&&z>(150-dis)&&eyePosition[1]<=55)z=(150-dis);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 120056 2016-01-17 20:32 Scene\Scene\Data\Box.bmp
文件 196664 2016-01-17 22:54 Scene\Scene\Data\Cylinder.bmp
文件 196664 2016-01-16 12:06 Scene\Scene\Data\Door.bmp
文件 196664 2016-01-16 12:56 Scene\Scene\Data\Floor.bmp
文件 9272 2016-01-17 19:33 Scene\Scene\Data\Hat.bmp
文件 800312 2016-01-18 19:13 Scene\Scene\Data\Lightning.bmp
文件 132152 2016-01-18 16:18 Scene\Scene\Data\Mask.bmp
文件 393272 2016-01-18 16:15 Scene\Scene\Data\Sky.bmp
文件 393272 2016-01-18 11:23 Scene\Scene\Data\Star.bmp
文件 327184 2016-01-18 20:26 Scene\Scene\Data\Thunder.wav
文件 196664 2016-01-16 12:58 Scene\Scene\Data\Wall.bmp
文件 606 2016-01-21 00:08 Scene\Scene\Debug\cl.command.1.tlog
文件 13270 2016-01-21 00:08 Scene\Scene\Debug\CL.read.1.tlog
文件 312 2016-01-21 00:08 Scene\Scene\Debug\CL.write.1.tlog
文件 2 2016-01-21 00:08 Scene\Scene\Debug\li
文件 2 2016-01-21 00:08 Scene\Scene\Debug\li
文件 2 2016-01-21 00:08 Scene\Scene\Debug\li
文件 2 2016-01-21 00:08 Scene\Scene\Debug\li
文件 2 2016-01-21 00:08 Scene\Scene\Debug\li
文件 2 2016-01-21 00:08 Scene\Scene\Debug\li
文件 2298 2016-01-21 00:08 Scene\Scene\Debug\li
文件 5716 2016-01-21 00:08 Scene\Scene\Debug\li
文件 694 2016-01-21 00:08 Scene\Scene\Debug\li
文件 100871 2016-01-21 00:08 Scene\Scene\Debug\main.obj
文件 364 2016-01-21 00:08 Scene\Scene\Debug\mt.command.1.tlog
文件 398 2016-01-21 00:08 Scene\Scene\Debug\mt.read.1.tlog
文件 294 2016-01-21 00:08 Scene\Scene\Debug\mt.write.1.tlog
文件 492 2016-01-21 00:08 Scene\Scene\Debug\rc.command.1.tlog
文件 370 2016-01-21 00:08 Scene\Scene\Debug\rc.read.1.tlog
文件 274 2016-01-21 00:08 Scene\Scene\Debug\rc.write.1.tlog
............此处省略21个文件信息
- 上一篇:上兴远控2012
- 下一篇:会议管理系统的分析与设计
评论
共有 条评论