openGL+VS2010的例程--旋转变色立方体(三维)

效果图如上。

步骤:首先,变换模型视角;然后,改变颜色;最后,利用顶点数组绘制立方体。

源代码如下:

#include <GL/glut.h> 

// 绘制立方体

// 将立方体的八个顶点保存到一个数组里面

static const float vertex_list[][3] =
{
    -0.5f, -0.5f, -0.5f,
    0.5f, -0.5f, -0.5f,
    -0.5f, 0.5f, -0.5f,
    0.5f, 0.5f, -0.5f,
    -0.5f, -0.5f, 0.5f,
    0.5f, -0.5f, 0.5f,
    -0.5f, 0.5f, 0.5f,
    0.5f, 0.5f, 0.5f,
};

// 将要使用的顶点的序号保存到一个数组里面 

static const GLint index_list[][2] =
{
    {0, 1},
    {2, 3},
    {4, 5},
    {6, 7},
    {0, 2},
    {1, 3},
    {4, 6},
    {5, 7},
    {0, 4},
    {1, 5},
    {7, 3},
    {2, 6}
}; 

// 绘制立方体

void DrawCube(void)
{
    int i,j;

    glBegin(GL_LINES);
    for(i=0; i<12; ++i) // 12 条线段
    {
        for(j=0; j<2; ++j) // 每条线段 2个顶点
        {
            glVertex3fv(vertex_list[index_list[i][j]]);
        }
    }
    glEnd();
}

static float rotate = 0;
static int times = 0;

void renderScene(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清理颜色缓冲和深度缓冲

    glMatrixMode(GL_MODELVIEW); // 对模型视景的操作
    glLoadIdentity(); // 重置当前指定的矩阵为单位矩阵
    glPushMatrix(); // 压栈

    //glTranslatef(-0.2, 0, 0); // 平移
    //glScalef(1, 1, 1);    // 缩放

    times++;
    if(times > 100)
    {
        times = 0;
    }

    if(times % 100 == 0) // [0, 100)
    {
        rotate += 0.5; // [0, 20)
    }

    glRotatef(rotate, 0, 1, 0); // 旋转
    glRotatef(rotate, 1, 0, 0);

    // 动态颜色变换--红->绿->蓝->红
    if(rotate == 0)
        glColor3f(1, 0, 0);
    if(rotate ==90)
        glColor3f(0, 1, 0);
    if(rotate ==180)
        glColor3f(0, 0, 1);
    if(rotate ==270)
        glColor3f(1, 1, 0);
    if(rotate ==360)
        rotate = 0; 

    DrawCube(); // 绘制立方体

    glPopMatrix();// 出栈
    glutSwapBuffers();
} 

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);  // 初始化GLUT
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100, 100);  // 显示窗口在屏幕的相对位置
    glutInitWindowSize(500, 500); // 设置显示窗口大小
    glutCreateWindow(argv[0]); // 创建窗口,附带标题

    glutDisplayFunc(renderScene); // 注册显示用的函数
    glutIdleFunc(renderScene); // 注册空闲用的函数

    glutMainLoop(); // GLUT 状态机

    return 0; 

}
时间: 2024-11-07 19:51:45

openGL+VS2010的例程--旋转变色立方体(三维)的相关文章

openGL+VS2010的例程--旋转立方体(三维)

效果图如上: 步骤:首先,设置模型视角往后退,再旋转视角:然后,用默认绘制立方体函数绘制:最后,利用空闲对模型做角度微调. 实现代码如下: 1 #include <GL\glut.h> 2 3 GLfloat xRotated, yRotated, zRotated; 4 5 void Display(void) 6 { 7 glClear(GL_COLOR_BUFFER_BIT); 8 glLoadIdentity(); 9 glTranslatef(0.0,0.0,-4.0); 10 gl

openGL+VS2010的例程--旋转贴图灯笼(三维)

效果图如上: 步骤:略. 常见问题: 1.编译提示"gl/glaux.h"不存在,多发生在VS2008版本以上. 解决办法:下载包含"glaux.h"的库文件. 下载地址:http://yunpan.cn/cKZPLCcQufqRi 访问密码 ba74 2.运行时提示”text1.bmp“打开失败. 解决办法:将2个贴图文件放在项目文件夹下,如:X:...\Textures1\textures1内. 实现代码如下: main.cpp 1 /*************

openGL+VS2010的例程--空间摄影机注释版(三维)

效果图如上: 步骤:请看注释,这里略. 实现代码,有3个文件,如下: 1.main.cpp 1 /********************************************************************** 2 3 Camera with OpenGL 4 5 June, 11th, 2000 6 7 This tutorial was written by Philipp Crocoll 8 Contact: 9 [email protected] 10 www

openGL+VS2010的例程--特效(三维)

效果图如上: 步骤:略. 实现代码如下: main.cpp 1 /********************************************************************** 2 3 Particle Engine / Billboarding 4 5 October, 21st, 2002 6 7 This tutorial was written by Philipp Crocoll 8 Contact: 9 [email protected] 10 www.

openGL+VS2010的例程--城堡模型注释版(三维)

效果图如上: 步骤:略,构成顺序参考下图1.2. 图1 城墙构成顺序说明图: 图2  塔楼构成说明图:略 实现代码如下: main.cpp 1 /********************************************************************** 2 3 Castle - using Display Lists 4 5 June, 12th, 2000 6 7 This tutorial was written by Philipp Crocoll 8 C

openGL+VS2010的例程--太阳地球月球运动模型(三维)

效果图如上: 步骤:略 实现代码如下: 1 #include "windows.h" 2 #include <gl\glut.h> 3 4 #define SunSize 0.4 5 #define EarthSize 0.06 6 #define MoonSize 0.016 7 8 GLfloat SpeedMultiplicator = 1.0; 9 GLfloat DaysPerYear = 50.0; //OK, ok... but it is soo slow

openGL+VS2010的例程--静态平滑变色三角形(二维)

效果图如上: 步骤:首先,绘制顶点颜色不同的三角形:然后,设置边框大小改变时,重新按固定长宽比例投影,到整个显示界面. 实现代码如下: #include <GL\glut.h> void Display(void) { glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); glBegin(GL_POLYGON); glColor3f(0.0,0.0,0.0); glVertex3f(-0.5,-0.5,-3.0); glColor3f(1.0,0.0,

openGL+VS2010的例程--太阳地球月球运动模型增强版(三维)

效果图如上: 步骤:请看注释,这里略. 实现代码如下: 1 #include "windows.h" 2 #include <gl\glut.h> 3 4 // 三者的大小比例 5 #define SunSize 0.4 6 #define EarthSize 0.06 7 #define MoonSize 0.016 8 9 GLfloat SpeedMultiplicator = 0.01;// 运行倍数 10 // 时间比例 11 GLfloat DaysPerYea

openGL+VS2010的例程--立体四面体(二维)

说明:通过6条线段组合,构造一个立体四面体,是最基本的二维实现. 实现代码如下: #include <GL/glut.h> void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 200.0, 0.0, 150.0); } void lineSegment(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0