所有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.0f, 1.0f, 0.0f); //上顶点
glColor3f(0.0f,1.0f,0.0f); //使用绿色绘制左下顶点
glVertex3f(-1.0f,-1.0f, 0.0f); // 左下
glColor3f(0.0f,0.0f,1.0f); //使用蓝色绘制右下顶点
glVertex3f( 1.0f,-1.0f, 0.0f); // 右下
glEnd();
glPopMatrix(); //恢复当前矩阵为上一次push时的矩阵
glTranslatef(1.5f,0.0f,-6.0f);
glColor3f(0.0f,0.0f,1.0f); //将当前颜色值设置为蓝色 绘制整个正方形
glBegin(GL_QUADS); // 绘制正方形
glVertex3f(-1.0f, 1.0f, 0.0f); // 左上
glVertex3f( 1.0f, 1.0f, 0.0f); // 右上
glVertex3f( 1.0f,-1.0f, 0.0f); // 左下
glVertex3f(-1.0f,-1.0f, 0.0f); // 右下
glEnd();
glutSwapBuffers(); //强制绘图命令执行绘制在缓冲区交换出来
}
最后的效果图:
末尾总结:
glColor3f(d)将指定openggl状态中颜色值,使得绘制的时候都将使用这个颜色值 直到再次修改这个值,在绘制正方形的可以得到这个解释.
其次, 绘制三角形的时候,只是指定三个顶点的用三种不同颜色绘制,为什么结果会使得三角形变成彩色的呢?
其原理在于它使用任意两点绘制一条线段的时候,
线段内的其他任一点都将会是这两点颜色值的一个线性插值.
posted on 2009-07-15 14:48
米游 阅读(549)
评论(1) 编辑 收藏 引用 所属分类:
OpenGL/OSG