OpenGL实现三维迷宫游戏(一)

这篇博客分享了使用OpenGL实现三维迷宫游戏的过程,包括迷宫的构造、替身模型加载、键盘控制、碰撞检测以及纹理贴图。作者选择了附加要求之一,即在游戏界面同时显示二维辅助地图,显示已探索区域。文章描述了采用透视投影和立方体拼接方法创建迷宫,并通过数组存储和更新迷宫状态。虽然效果简单,但作者计划添加纹理并完善其他功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《计算机图形学》这门课的第二个实验,觉得还挺有意思的…

实验要求

设计一个OpenGL程序,创建一个三维迷宫,支持替身通过一定交互手段在迷宫中漫游,基本功能包括:
- 迷宫应当至少包含10 * 10 个Cell,不能过于简单,下图给出一种示例。
- 读取给定的替身模型,加载到场景中。
- 键盘方向键控制替身转向与漫游。
- 有碰撞检测,替身不应当穿墙。
- 支持切换第一视角和第三视角进行观察。
- 迷宫场景中的墙、地面等应贴上纹理。
附加要求(可选择一个):
- 同时加入二维辅助地图,替身在三维迷宫探索的同时,在小地图中显示已经探索的区域;(我选的是这一个,其他的由于最近事情比较多就没有做,以后有机会再补吧…如果有机会的话…=。=)
- 在俯视状态下,可以通过鼠标点选替身需要到达的目的地,通过寻径算法,控制替身自动到达目的地;
- 迷宫地图交互编辑功能,例如,可以设计一个二维地图编辑器,根据用户的绘制,拉伸得到三维迷宫场景;
- 其他相当难度,可以增加迷宫游戏趣味性的功能(需要通过指导老师认可)

实现过程

投影模式采用透视投影,第一、三视角之间的切换只需改变gluLookAt(GLdouble eyex,GLdouble eyey,GLdouble eyez,GLdouble centerx,GLdouble centery,GLdouble centerz,GLdouble upx,GLdouble upy,GLdouble upz);的参数值即可。

main()方法:

int main(int argc,char **argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);

    glutInitWindowPosition(300, 50);
    glutInitWindowSize(700, 700);
    glutCreateWindow("迷宫");

    init();

    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
}

init()方法:

void init(){

    glClearColor(0.8, 0.8, 0.8, 1);//用灰色清屏
    glEnable(GL_DEPTH_TEST);//开启深度测试
    glEnable(GL_TEXTURE_2D);//启用二维纹理
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(50, 1, 0.5, 100);/*其实一开始ZNear设的是1~*/
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    gluLookAt(lookX, lookY, lookZ, centerX,centerY,centerZ,upX,upY,upZ);

    glShadeModel(GL_SMOOTH);     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值