Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541331
  • 博文数量: 104
  • 博客积分: 4131
  • 博客等级: 上校
  • 技术积分: 1137
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-31 15:05
文章分类

全部博文(104)

文章存档

2011年(13)

2010年(23)

2009年(68)

我的朋友

分类:

2009-09-26 14:54:28

1.点绘制
OpenGL提供了一系列函数。它们都以glVertex开头,后面跟一个数字和1~2个字母。例如:
glVertex2d(x,y)
glVertex2f(x,y)
glVertex3f(x,y,z)
glVertex3fv(GLfloat *p)
数字表示参数的个数:
2表示有两个参数,3表示三个;
字母表示参数的类型:
i表示32位整数(OpenGL中将这个类型定义为GLint和GLsizei),
f表示32位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf),
d表示64位浮点数(OpenGL中将这个类型定义为GLdouble和GLclampd)。
glVertex2i(3, 3);
glVertex2f(3.0f, 3.0f);
glVertex3f(3.0f, 3.0f, 0.0f);
GLfloat p[] = { 3.0f,3.0f, 0.0f };
glVertex3fv(p)
注:OpenGL中定义的点可以有不同的尺寸,其函数形式为:
      void  glPointSize( GLfloat size );
  参数size设置点的宽度(以象素为单位),必须大于0.0,缺省时为1.0。
2.图元绘制
OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略)。
在调用glBegin函数时,我们需要传入一个参数,以告诉OpenGL我们将绘制什么类型的图元
2.1点
glBegin(GL_POINTS);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.5f, 0.0f);
glEnd();
2.2线
glBegin(GL_LINES);
    glVertex2f(0.0f, 0.0f);
    glVertex2f(0.5f, 0.0f);
glEnd();
2.3三角形
 glBegin(GL_TRIANGLES);
     glVertex(1,0,1);
     glVertex(0,1,0);
     glVertex(1,1,0);
glEnd;
2.4正方形
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();
注:
1. 在正常情况下,OpenGL中的多边形的正面和反面是由绘制的多边形的顶点顺序决定的,逆时针绘制的面是多边形的正面,但是,在OpenGL中使用glFrontFace函数可以自定义多边形的正面。
该函数的参数mode指定了正面的方向。它可以是CL_CCW和CL_CW,分别指定逆时针和顺时针方向为多边形的正方向。
void glFrontFace(GLenum mode);
2. OpenGL规定多边形中的线段不能交叉,区域内不能有空洞,也即多边形必须是凸多边形(指多边形任意非相邻的两点的连线位于多边形的内部),不能是凹多边形,否则不能被OpenGL函数接受。
3.颜色
3.1颜色模式
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。
RGBA模式中,数据直接就代表了颜色;而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表。
RGBA颜色
RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而alpha不直接影响颜色,它将留待以后介绍。
glColor*系列函数可以用于设置颜色,其中三个参数的版本可以指定R、G、B的值,而A值采用默认;四个参数的版本可以分别指定R、G、B、A的值。例如:
void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
glColor3f(1.0f, 0.0f, 0.0f);   表示不使用绿、蓝色,而将红色使用最多,于是得到最纯净的红色。
glColor3f(0.0f, 1.0f, 1.0f);   表示使用绿、蓝色到最多,而不使用红色。混合的效果就是浅蓝色。
glColor3f(0.5f, 0.5f, 0.5f);   表示各种颜色使用一半,效果为灰色。
3.2着色模式
OpenGl还提供了两种着色模式:光滑着色与平面着色
Flat coloring(平面着色)给整个图元涂上固定的一种颜色
Smooth coloring(平滑着色)将图元的各个顶点的不同颜色混合在一起,创建漂亮的色彩混合。
 glBegin(GL_TRIANGLES);
     glColor3f(1.0f,0.0f,0.0f);
     glVertex(1,0,1);   
     glColor3f(0.0f,1.0f,0.0f);
     glVertex(0,1,0);
     glColor3f(0.0f,0.0f,1.0f);
     glVertex(1,1,0);
glEnd;
这样三角形的三个顶点的颜色均不同,在三角形的中间进行了融合
四角形平面着色
glColor3f(0.5f,0.5f,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();
 
阅读(1716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~