資源簡介
OpenGL實現的3D魔方,按方向鍵可以旋轉,按F1-F9可以擰動魔方。

代碼片段和文件信息
#include?
#include?
#include?
#include?
//小方塊的結構,包括小方塊在xyz上的旋轉角度,顏色數組下標,小方塊的三維坐標。
struct?rcube{
????int?xr;
????int?yr;
????int?zr;
????int?cl[6];
????GLfloat?x;
????GLfloat?y;
????GLfloat?z;
};
struct?rcube?rc[3][3][3];
struct?rcube?*temp[3][3];
//顏色數組
GLfloat?color[6][3]={{1.00.00.0}{0.01.00.0}{0.00.01.0}
{1.01.00.0}{1.00.01.0}{0.01.01.0}};
int?tempc[3][3][6];
//有關旋轉的一些變量
GLfloat?xRot?=?10.0f;
GLfloat?yRot?=?10.0f;
int?rotateType=0;
int?rotateOK=0;
int?rotateRate=50;
int?rotate=0;
///////////////////////////////////////////////////////////////////////////////
//畫小方塊
void?drawcube(int?cl[6])
{????
????glBegin(GL_QUADS);
????//右面
????glColor3fv(color[cl[0]]);
????glVertex3f(0.14f-0.14f-0.14f);
????glVertex3f(0.14f0.14f-0.14f);
????glVertex3f(0.14f0.14f0.14f);
????glVertex3f(0.14f-0.14f0.14f);
????//左面
????glColor3fv(color[cl[1]]);
????glVertex3f(-0.14f-0.14f0.14f);
????glVertex3f(-0.14f0.14f0.14f);
????glVertex3f(-0.14f0.14f-0.14f);
????glVertex3f(-0.14f-0.14f-0.14f);
????//前面
????glColor3fv(color[cl[2]]);
????glVertex3f(-0.14f0.14f0.14f);
????glVertex3f(-0.14f-0.14f0.14f);
????glVertex3f(0.14f-0.14f0.14f);
????glVertex3f(0.14f0.14f0.14f);
????//后面
????glColor3fv(color[cl[3]]);
????glVertex3f(-0.14f0.14f-0.14f);
????glVertex3f(0.14f0.14f-0.14f);
????glVertex3f(0.14f-0.14f-0.14f);
????glVertex3f(-0.14f-0.14f-0.14f);
????//上面
????glColor3fv(color[cl[4]]);
????glVertex3f(-0.14f0.14f-0.14f);
????glVertex3f(-0.14f0.14f0.14f);????
????glVertex3f(0.14f0.14f0.14f);
????glVertex3f(0.14f0.14f-0.14f);
????//下面
????glColor3fv(color[cl[5]]);
????glVertex3f(-0.14f-0.14f-0.14f);
????glVertex3f(0.14f-0.14f-0.14f);
????glVertex3f(0.14f-0.14f0.14f);
????glVertex3f(-0.14f-0.14f0.14f);
????glEnd();
????glFlush();
}????
//窗口刷新時被調用。
void?RenderScene(void)
{
????int?ijk;
????glClear(GL_COLOR_BUFFER_BIT?|?GL_DEPTH_BUFFER_BIT);
????glPushMatrix();?
????glRotatef(xRot?1.0f?0.0f?0.0f);
????glRotatef(yRot?0.0f?1.0f?0.0f);
????for(i=0;i<3;i++)
????{
????????for(j=0;j<3;j++)
????????{
????????????for(k=0;k<3;k++)
????????????{
????????????????//魔方在這顯示
????????????????glPushMatrix();???????
????????????????glRotatef(rc[i][j][k].xr?1.0f?0.0f?0.0f);
????????????????glRotatef(rc[i][j][k].zr?0.0f?0.0f?1.0f);?
????????????????glRotatef(rc[i][j][k].yr?0.0f?1.0f?0.0f);?????
????????????????glTranslatef(rc[i][j][k].xrc[i][j][k].yrc[i][j][k].z);????????????????
????????????????drawcube(rc[i][j][k].cl);????????????
????????????????glPopMatrix();
????????????}
????????}
????}????????????
????glPopMatrix();
????glutSwapBuffers();
}
//初始化。
void?SetupRC()
{
????GLfloat?xyz;
????int?ijkl;
????for(i=0x=-0.3f;i<3;i++x+=0.3f)
????{
????????for(j=0y=-0.3f;j<3;j++y+=0.3f)
????????{
????????????for(k=0z=-0.3f;k<3;k++z+=0.3f)
????????????{
???????????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3972??2012-12-12?16:27??MagicCube\MagicCube\MagicCube.vcproj
?????文件???????1419??2012-12-12?16:27??MagicCube\MagicCube\MagicCube.vcproj.JS-QINLETAO.qinletao.user
?????文件???????9431??2012-12-12?16:27??MagicCube\MagicCube\main.cpp
?????文件??????27648??2012-12-12?16:27??MagicCube\MagicCube.ncb
?????文件????????892??2012-12-12?16:26??MagicCube\MagicCube.sln
????..A..H.??????9216??2012-12-12?16:27??MagicCube\MagicCube.suo
?????目錄??????????0??2012-12-12?16:27??MagicCube\MagicCube
?????目錄??????????0??2012-12-12?16:26??MagicCube
-----------?---------??----------?-----??----
????????????????52578????????????????????8
評論
共有 條評論