資源簡介
基于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使用)
- 下一篇:信息系統項目管理師重點難點暨真題解析資料
評論
共有 條評論