• 大小: 116KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: 其他
  • 标签: OpenGLC/C++  

资源简介

可以实现漫游内置的迷宫场景,并且可以通过鼠标进行视角的控制,带有碰撞检测功能。 本实验基于VS2013

资源截图

代码片段和文件信息

#define FREEGLUT_STATIC
#define GLUT_DISABLE_ATEXIT_HACK
#include 
#include 
#include 
#include 
#include 
using namespace std;

#ifdef _DEBUG
#pragma comment(lib “freeglut_staticd.lib“)
#else
#pragma comment(lib “freeglut_static.lib“)
#endif

#define WIDTH 500
#define HEIGHT 500


GLfloat eyex = 3 eyey = 2 eyez = 28;
GLfloat centerx = 3 centery = 2 centerz = 0;
GLfloat upx = 0 upy = 1 upz = 0;
void DrawMaze();

GLfloat vectorx = centerx - eyex;
GLfloat vectory = centery - eyey;
GLfloat vectorz = centerz - eyez;
GLdouble vectorlen = sqrt(vectorx*vectorx + vectory*vectory + vectorz*vectorz);

GLfloat WalkPace = 0.2;
GLfloat OFFSET = 0.5;
static float Theta = 0.02;//每次旋转5度
GLdouble cosTheta = cos(Theta);
GLdouble sinTheta = sin(Theta);
const int block_size = 2;
const int map_size = 7;
int map[49] = { \
1 1 1 1 1 1 1 \
1 0 0 0 0 0 1 \
1 0 0 0 0 0 1 \
1 1 1 1 0 0 1 \
1 0 0 0 0 0 1 \
1 0 0 0 0 0 1 \
1 0 0 1 1 1 1  \
};

void keyboard(unsigned char key int x int y) {
GLfloat tmpCenterx = centerx tmpCentery = centery tmpCenterz = centerz;
GLfloat tmpEyex = eyex tmpEyey = eyey tmpEyez = eyez;
switch (key)    {
case ‘w‘:case ‘W‘: {
centerx += vectorx*WalkPace / vectorlen;
centerz += vectorz*WalkPace / vectorlen;
eyex = centerx - vectorx;
eyez = centerz - vectorz;
if ((eyex>-1 && eyex < map_size*block_size -1) && (eyez>-1 && eyez //roll back!
centerx = tmpCenterx; centerz = tmpCenterz;
eyez = tmpEyez; eyex = tmpEyex;
}
break;
}
case ‘s‘: case ‘S‘: {
centerx -= vectorx*WalkPace / vectorlen;
centerz -= vectorz*WalkPace / vectorlen;
eyex = centerx - vectorx;
eyez = centerz - vectorz;
if ((eyex>-1 && eyex < map_size*block_size - 1) && (eyez>-1 && eyez //roll back!
centerx = tmpCenterx; centerz = tmpCenterz;
eyez = tmpEyez; eyex = tmpEyex;
}
break;
}
case ‘d‘: case ‘D‘: {
GLfloat tx tz;
tx = -vectorz; tz = vectorx;
centerx += tx*WalkPace / vectorlen;
centerz += tz* WalkPace / vectorlen;
eyex = centerx - vectorx;
eyez = centerz - vectorz;
if ((eyex>-1 && eyex < map_size*block_size - 1) && (eyez>-1 && eyez //roll back!
centerx = tmpCenterx; centerz = tmpCenterz;
eyez = tmpEyez; eyex = tmpEyex;
}
break;
}
case ‘a‘:case ‘A‘:{
GLfloat tx tz;
tx = vectorz; tz = -vectorx;
centerx += tx*WalkPace / vectorlen;
centerz += tz* WalkPace / vectorlen;
eyex = centerx - vectorx;
eyez = centerz - vectorz;
if ((eyex>-1 && eyex < map_size*block_size - 1) 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-05-11 11:38  CGRoaming\
     目录           0  2016-05-11 11:39  CGRoaming\CG\
     文件        6873  2016-05-11 11:36  CGRoaming\CG\CG.cpp
     文件        4440  2016-05-10 19:28  CGRoaming\CG\CG.vcxproj
     文件        1081  2016-05-10 19:28  CGRoaming\CG\CG.vcxproj.filters
     文件         306  2016-04-08 19:52  CGRoaming\CG\CG.vcxproj.user
     文件         952  2016-03-10 16:06  CGRoaming\CG.sln
     文件       53760  2016-05-11 11:36  CGRoaming\CG.v12.suo
     目录           0  2016-05-11 11:37  CGRoaming\Release\
     文件      243712  2016-05-11 11:36  CGRoaming\Release\CG.exe

评论

共有 条评论

相关资源