• 大小: 13.26MB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2023-06-17
  • 语言: 其他
  • 标签: OpenGL  3D魔方  

资源简介

基于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

评论

共有 条评论