• 大小: 1.35MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-23
  • 语言: 其他
  • 标签: 3D场景  

资源简介

本系统绘制了一个真实感的三维场景,并实现场景漫游。使用按键↑、↓、←、→或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\link-cvtres.read.1.tlog

     文件          2  2016-01-21 00:08  Scene\Scene\Debug\link-cvtres.write.1.tlog

     文件          2  2016-01-21 00:08  Scene\Scene\Debug\link.6720-cvtres.read.1.tlog

     文件          2  2016-01-21 00:08  Scene\Scene\Debug\link.6720-cvtres.write.1.tlog

     文件          2  2016-01-21 00:08  Scene\Scene\Debug\link.6720.read.1.tlog

     文件          2  2016-01-21 00:08  Scene\Scene\Debug\link.6720.write.1.tlog

     文件       2298  2016-01-21 00:08  Scene\Scene\Debug\link.command.1.tlog

     文件       5716  2016-01-21 00:08  Scene\Scene\Debug\link.read.1.tlog

     文件        694  2016-01-21 00:08  Scene\Scene\Debug\link.write.1.tlog

     文件     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个文件信息

评论

共有 条评论