资源简介
基于OpenGL的3D旋转魔方,包括工程和源代码
学生作品,希望各位多多关照
代码片段和文件信息
#include “GL/glut.h“
#include “stdio.h“
#include
#include
#pragma comment(lib “WINMM.LIB“)
#include “transform.c“
#include “texture.c“
/* *这是一个用极坐标指定的视图变换函数
*例如但需要视野围绕原点的物体作轨道运动时可以调用该函数
*distance定义轨道半径
azimuth定义视野在xy平面上旋转的角度
elevation定义视野在yz平面上旋转的角度
twist定义视镜体围绕视野的旋转角度
*/
void polarView(GLdouble distanceGLdouble twist
GLdouble elevationGLdouble azimuth)
{
glTranslated(0.00.0-distance);
glRotated(-twist0.00.01.0);
glRotated(-elevation1.00.00.0);
glRotated(azimuth0.00.01.0);
}
/*初始化各个立方体*/
void initCubes(){
GLfloat xyz;
int ijkt;
for(i=0x=-1.0;i<3;i++x+=1.0){
for(j=0y=-1.0;j<3;j++y+=1.0){
for(k=0z=-1.0;k<3;k++z+=1.0){
cubes[i][j][k].x=x;cubes[i][j][k].sx=0;
cubes[i][j][k].y=y;cubes[i][j][k].sy=0;
cubes[i][j][k].z=z;cubes[i][j][k].sz=0;
for(t=0;t>MAXORDER;t++){
cubes[i][j][k].orders[t] = 0;
}
}
}
}
}
void drawCube(){
int ijkt;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
for(k=0;k<3;k++){
glPushMatrix();
glRotatef(cubes[i][j][k].sx 1.0 0.0 0.0);
glRotatef(cubes[i][j][k].sz 0.0 0.0 1.0);
glRotatef(cubes[i][j][k].sy 0.0 1.0 0.0);
for(t=MAXORDER-1;t>-1;t--){
switch(cubes[i][j][k].orders[t]){
case ‘x‘:
glRotatef(90.0 1.0 0.0 0.0);
break;
case ‘y‘:
glRotatef(90.0 0.0 1.0 0.0);
break;
case ‘z‘:
glRotatef(90.0 0.0 0.0 1.0);
break;
}
}
glTranslatef(cubes[i][j][k].xcubes[i][j][k].ycubes[i][j][k].z);
cube(ijk);
glPopMatrix();
}
}
}
}
/*绘制场景*/
void display(void){
InitGL();
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping ( NEW ) */
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT GL_NICEST); // Really Nice Perspective Calculationsculations
glClearColor(0.00.00.00.0);
glClear(GL_COLOR_BUFFER_BIT| GL_DEPTH_BUFFER_BIT);
glPushMatrix();
polarView(9.00.0yzxy);
drawCube();
glPopMatrix();
glutSwapBuffers();
}
/*当窗口被改变时的处理方法*/
void reshape(int widthint height){
//设置适口大小和位置,保证魔方不变形
GLint side = width>height? height:width;
GLint pos = (width-side)/2;
glViewport(pos0(GLsizei)side(GLsizei)side);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50.01.01.015.0);
}
void init(){
initCubes();
}
/*主函数
初始化
设定显示模式双缓冲RGB
初始化窗口大小位置
注册事件函数
显示窗口
*/
main(int argcchar **argv){
glutInit(&argcargv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB| GLUT_DEPTH);
glutInitWindowSize(800600);
glutInitWindowPos
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 149072 2013-12-08 21:16 glut.zip
文件 112 2013-12-08 23:23 若程序无法运行请打开.txt
目录 0 2013-12-10 22:34 魔方\
文件 3461 2013-12-09 21:31 魔方\mofang.c
文件 3461 2013-12-09 20:20 魔方\mofang.dsp
文件 520 2013-12-09 20:20 魔方\mofang.dsw
文件 241734 2013-12-09 21:31 魔方\mofang.exe
文件 41984 2013-12-09 21:33 魔方\mofang.ncb
文件 48640 2013-12-09 21:33 魔方\mofang.opt
文件 1196 2013-12-09 21:31 魔方\mofang.plg
目录 0 2013-12-10 22:32 魔方\pic\
文件 196662 2010-05-26 20:29 魔方\pic\1.bmp
文件 196662 2010-05-28 11:48 魔方\pic\11.bmp
文件 196662 2010-05-28 11:35 魔方\pic\12.bmp
文件 196664 2000-03-06 02:10 魔方\pic\13.bmp
文件 196662 2010-05-27 11:49 魔方\pic\2.bmp
文件 196662 2010-05-27 22:38 魔方\pic\3.bmp
文件 196662 2013-12-09 21:29 魔方\pic\4.bmp
文件 196662 2013-12-09 21:28 魔方\pic\5.bmp
文件 196662 2013-12-09 21:30 魔方\pic\6.bmp
文件 15293996 2013-12-09 20:46 魔方\pic\music.wav
文件 4218 2013-12-09 19:45 魔方\texture.c
文件 4762 2013-11-26 10:33 魔方\transform.c
- 上一篇:编程字体(xp/7使用)
- 下一篇:信息系统项目管理师重点难点暨真题解析资料
相关资源
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
- OpenGL场景漫游
- 用opengl实现的太阳系模型
- OpenGL 3D贪吃蛇程序,很小
- OpenGL爆炸碎片化效果 源码
- OpenGL三茶壶三光源光源绕着茶壶旋转
- 10个OpenGL的源码
- vc写的一个游戏里面三维场景漫游
- OpenGL实现的简单游戏引擎
- OpenGL游戏程序设计源码
- glew最新版本glew1.11.0
- OpenGL 火箭
- 天空盒和地面
- 三维场景漫游.zip
- openGL实现的正方体六面贴图
- opengl简易翻牌游戏
- Qt Openglwidget 显示图片纹理贴图
评论
共有 条评论