随笔-38  评论-23  文章-0  trackbacks-0

所有lesson都将基于lesson_1中头文件而写

lesson_2中,知道了如何简单的绘制基本图形的后,这次将要学习如何使用glColor3d(f)来设置opengl状态机中的颜色.使得绘制时候将采用自定义的颜色值.

#include "openglglut.h"

/*
** opengl 教程第三课内容
** 在窗口的左边部分绘制一个多彩的三角形,它将使用平滑着色
** 在窗口的右边部分绘制一个蓝色的正方形,它将使用单调着色
*/

int main(int argc, char** argv)
{
    
/** 初始化窗口 并创建窗口*/
    createWindow(
"opengl lesson_3",&argc,argv);

    
/** 注册glut的一些函数 */
    glutReshapeFunc(glutResize);     
//窗口调整函数 使得调整后图形显示不发生改变
    glutDisplayFunc(glutDisplay);    //重绘函数     使得可以在窗口中绘制图形
    glutSpecialFunc(glutSpecial);    //特殊按键函数 使得实现全屏/窗口切换
    
    
/** 初始化opengl的一些操作*/
    InitOpenGL();

    
/** 进入仿真循环*/
    glutMainLoop();
}


void glutDisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT 
| GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();                   
//将先初始化单位矩阵
    glPushMatrix();                     //将当前矩阵复制一个压入栈顶,并保持当前矩阵不变
    glTranslatef(-1.5,0.0,-6.0);

    
//决定三角形三个顶点的颜色值,三角形内部各个点的颜色将会是线性差值的
    glBegin(GL_TRIANGLES);             // 绘制三角形
        glColor3f(1.0f,0.0f,0.0f);     //使用红色绘制上顶点
        glVertex3f( 0.0f1.0f0.0f); //上顶点
        glColor3f(0.0f,1.0f,0.0f);     //使用绿色绘制左下顶点
        glVertex3f(-1.0f,-1.0f0.0f); // 左下
        glColor3f(0.0f,0.0f,1.0f);     //使用蓝色绘制右下顶点
        glVertex3f( 1.0f,-1.0f0.0f); // 右下
    glEnd();
    glPopMatrix();                     
//恢复当前矩阵为上一次push时的矩阵

    glTranslatef(
1.5f,0.0f,-6.0f);
    glColor3f(
0.0f,0.0f,1.0f);         //将当前颜色值设置为蓝色 绘制整个正方形
    glBegin(GL_QUADS);                 // 绘制正方形
        glVertex3f(-1.0f1.0f0.0f); // 左上
        glVertex3f( 1.0f1.0f0.0f); // 右上
        glVertex3f( 1.0f,-1.0f0.0f); // 左下
        glVertex3f(-1.0f,-1.0f0.0f); // 右下
    glEnd();

    glutSwapBuffers();                 
//强制绘图命令执行绘制在缓冲区交换出来
}

最后的效果图:

末尾总结:

glColor3f(d)将指定openggl状态中颜色值,使得绘制的时候都将使用这个颜色值 直到再次修改这个值,在绘制正方形的可以得到这个解释.
其次, 绘制三角形的时候,只是指定三个顶点的用三种不同颜色绘制,为什么结果会使得三角形变成彩色的呢?
其原理在于它使用任意两点绘制一条线段的时候,
线段内的其他任一点都将会是这两点颜色值的一个线性插值.
posted on 2009-07-15 14:48 米游 阅读(547) 评论(1)  编辑 收藏 引用 所属分类: OpenGL/OSG

评论:
# re: opengl学习 nehe opengl lesson_3 2009-07-16 15:47 | 李海威
非常好,期待接下来的45个lesson。呵呵  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理