1.點(diǎn)繪制
OpenGL提供了一系列函數(shù)。它們都以glVertex開頭,后面跟一個(gè)數(shù)字和1~2個(gè)字母。例如:
glVertex2d(x,y)
glVertex2f(x,y)
glVertex3f(x,y,z)
glVertex3fv(GLfloat *p)
數(shù)字表示參數(shù)的個(gè)數(shù):
2表示有兩個(gè)參數(shù),3表示三個(gè);
字母表示參數(shù)的類型:
i表示32位整數(shù)(OpenGL中將這個(gè)類型定義為GLint和GLsizei),
f表示32位浮點(diǎn)數(shù)(OpenGL中將這個(gè)類型定義為GLfloat和GLclampf),
d表示64位浮點(diǎn)數(shù)(OpenGL中將這個(gè)類型定義為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中定義的點(diǎn)可以有不同的尺寸,其函數(shù)形式為:
void glPointSize( GLfloat size );
參數(shù)size設(shè)置點(diǎn)的寬度(以象素為單位),必須大于0.0,缺省時(shí)為1.0。
2.圖元繪制
OpenGL要求:指定頂點(diǎn)的命令必須包含在glBegin函數(shù)之后,glEnd函數(shù)之前(否則指定的頂點(diǎn)將被忽略)。
在調(diào)用glBegin函數(shù)時(shí),我們需要傳入一個(gè)參數(shù),以告訴OpenGL我們將繪制什么類型的圖元
2.1點(diǎn)
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中的多邊形的正面和反面是由繪制的多邊形的頂點(diǎn)順序決定的,逆時(shí)針繪制的面是多邊形的正面,但是,在OpenGL中使用 glFrontFace函數(shù)可以自定義多邊形的正面。
該函數(shù)的參數(shù)mode指定了正面的方向。它可以是CL_CCW和CL_CW,分別指定逆時(shí)針和順時(shí)針方向?yàn)槎噙呅蔚恼较颉?/p>
void glFrontFace(GLenum mode);
2. OpenGL規(guī)定多邊形中的線段不能交叉,區(qū)域內(nèi)不能有空洞,也即多邊形必須是凸多邊形(指多邊形任意非相鄰的兩點(diǎn)的連線位于多邊形的內(nèi)部),不能是凹多 邊形,否則不能被OpenGL函數(shù)接受。
3.顏色
3.1顏色模式
OpenGL支持兩種顏色模式:一種是RGBA,一種是顏色索引模式。
RGBA模式中,數(shù)據(jù)直接就代表了顏色;而顏色索引模式中,數(shù)據(jù)代表的是一個(gè)索引,要得到真正的顏色,還必須去查索引表。
RGBA顏色
RGBA模式中,每一個(gè)像素會(huì)保存以下數(shù)據(jù):R值(紅色分量)、G值(綠色分量)、B值(藍(lán)色分量)和A值(alpha分量)。其中紅、綠、藍(lán)三種顏色相 組合,就可以得到我們所需要的各種顏色,而alpha不直接影響顏色,它將留待以后介紹。
glColor*系列函數(shù)可以用于設(shè)置顏色,其中三個(gè)參數(shù)的版本可以指定R、G、B的值,而A值采用默認(rèn);四個(gè)參數(shù)的版本可以分別指定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); 表示不使用綠、藍(lán)色,而將紅色使用最多,于是得到最純凈的紅色。
glColor3f(0.0f, 1.0f, 1.0f); 表示使用綠、藍(lán)色到最多,而不使用紅色?;旌系男Ч褪菧\藍(lán)色。
glColor3f(0.5f, 0.5f, 0.5f); 表示各種顏色使用一半,效果為灰色。
3.2著色模式
OpenGl還提供了兩種著色模式:光滑著色與平面著色
Flat coloring(平面著色)給整個(gè)圖元涂上固定的一種顏色
Smooth coloring(平滑著色)將圖元的各個(gè)頂點(diǎn)的不同顏色混合在一起,創(chuàng)建漂亮的色彩混合。
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;
這樣三角形的三個(gè)頂點(diǎn)的顏色均不同,在三角形的中間進(jìn)行了融合
四角形平面著色
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();
評論