您的位置:首页 > 运维架构

【OpenGL】学习笔记之一 绘制基本图形单元的方法

2014-05-21 21:21 633 查看
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();
转载地址 http://www.cocoachina.com/gamedev/opengl/2010/0504/1299.html
GLAPI void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height );

参数:视口范围 xy左下角 向右width 向上height

作用:设置视口

注意OpenGL使用的窗口坐标和WindowsGDI使用的窗口坐标是不一样的。

图3.1-1表示了在WindowsGDI中的窗口坐标,而图3.1-2则是OpenGL所定义的窗口坐标。



例如,要设置如图3.1-3中的视见区域,我们应该调用函数:

glViewPort(100,100,Width,Height);

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: