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();
評論
查看更多