嘿嘿,课内虚拟现实课程的大作业,做了一个基于opengl房间,参考网上的一些资料,再进行一些扩充。还有一个unity3d的大作业将在之后上传。
项目说明:
本项目基于OpenGL实现,编辑器VS,使用gl/glut.h库。
实现up键前进,down键后退,left左移,right右移,w视角上转,s视角下转,a左转,d右转,o关灯或开灯。具体实现内容包含纹理映射、光照、材质、控制浏览,并显示墙壁、玻璃、卧室、客厅、厨房中二十余种物体。
效果展示:
部分代码:
主函数:
void main(int argc, char* argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(100, 100);
glutCreateWindow("opengl room");
init();
glutReshapeFunc(reshape);
glutSpecialFunc(SpecialKeys);
glutKeyboardFunc(processNormalKeys);
glutDisplayFunc(draw);
glutMainLoop();
}
按键:
void processNormalKeys(unsigned char key, int x, int y) {
switch (key)
{
case 'w':
rotate_x -= 5;
break;
case 's':
rotate_x += 5;
break;
case 'a':
rotate_y -= 1;
break;
case 'd':
rotate_y += 1;
break;
case 'o':
lflag = !lflag;
break;
default:
break;
}
// 刷新
glutPostRedisplay();
}
/*生成棋盘纹理*/
void makeCheckImage(void) {
int i, j, c;
for (i = 0; i < checkImageHeight; i++) {
for (j = 0; j < checkImageWidth; j++) {
c = ((((i & 0x8) == 0) ^ ((j & 0x8)) == 0)) * 255;
checkImage[i][j][0] = (unsigned char)c;
checkImage[i][j][1] = (unsigned char)c;
checkImage[i][j][2] = (unsigned char)c;
checkImage[i][j][3] = (unsigned char)c;
}
}
}
完整代码和详细资料放在:🍞正在为您运送作品详情
欢迎下载交流