• 大小: 8KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: 其他
  • 标签: OpenGL  魔方  3D  

资源简介

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


评论

共有 条评论