資源描述:
《最新OpenGL圖形編程2基本圖形繪制(陳永強(qiáng))教學(xué)講義ppt.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、OpenGL圖形編程2基本圖形繪制(陳永強(qiáng))2.OpenGL基本圖形繪制2.1glBegin/glEnd2.2點(diǎn)的繪制2.3直線的繪制2.4多邊形面的繪制2.5OpenGL中的字符函數(shù)2.6OpenGL中的反走樣22.1glBegin/glEndOpenGL的圖元繪制放在函數(shù)glBegin和glEnd之間,由函數(shù)glBegin的參數(shù)指定繪制圖元的類型。2.2點(diǎn)的繪制點(diǎn)的繪制glBegin(GL_POINTS);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(10.0f,0.0f,0.0f);glEnd();72.2點(diǎn)的繪制點(diǎn)的屬性(大小)在OpenG
2、L中繪制一個(gè)點(diǎn)時(shí),點(diǎn)大小的默認(rèn)值是一個(gè)象素??梢杂煤瘮?shù)glPointSize修改這個(gè)值:voidglPointSize(GLfloatsize);這個(gè)函數(shù)采用一個(gè)參數(shù)來指定畫點(diǎn)時(shí)以象素為單位的近似直徑。82.2點(diǎn)的繪制點(diǎn)的屬性(大小)通常使用下面的代碼來獲取點(diǎn)大小的范圍和它們之間最小的中間值:GLfloatsizes[2];//保存繪制點(diǎn)的尺寸范圍GLfloatstep;//保存繪制點(diǎn)尺寸的步長(zhǎng)glGetFloatv(GL_POINT_SIZE_RANGE,sizes);glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);在數(shù)組seizes
3、中包含兩個(gè)元素,分別保存了glPointSize的最小有效值和最大有效值,而變量step將保存點(diǎn)大小之間允許的最小增量。指定范圍之外的大小不會(huì)被解釋為錯(cuò)誤,而是使用最接近指定值的可支持的最大或最小尺寸。92.3直線的繪制直線的繪制模式GL_LINESGL_LINE_STRIPGL_LINE_LOOP10(a)GL_LINES畫線模式(b)GL_LINE_LOOP畫線模式(c)GL_LINE_STRIP畫線模式圖5-57OpenGL畫線模式2.3直線的繪制直線的繪制使用模式GL_LINES可以在兩點(diǎn)之間畫線,在兩點(diǎn)(0,0,0)和(10,10,10)之間畫一條直線:glBegin
4、(GL_LINES);glVertex3f(0.0f,0.0f,0.0f);glVertex3f(10.0f,10.0f,10.0f);glEnd();注意,在glBegin/glEnd序列中兩個(gè)頂點(diǎn)指定了一個(gè)直線,如果序列中指定的點(diǎn)為奇數(shù)個(gè),那么最后一個(gè)頂點(diǎn)將被忽略。112.3直線的繪制直線的繪制需要在一系列的頂點(diǎn)之間繪制連續(xù)直線,就要用到GL_LINE_STRIP或GL_LINE_LOOP模式。122.3直線的繪制直線的繪制GL_LINE_STRIP模式可以根據(jù)指定的一系列頂點(diǎn),從一個(gè)頂點(diǎn)到另一個(gè)頂點(diǎn)用連續(xù)的線段畫線:glBegin(GL_LINE_STRIP);glVer
5、tex3f(0.0f,0.0f,0.0f);glVertex3f(10.0f,10.0f,0.0f);glVertex3f(20.0f,5.0f,0.0f);glEnd();在xy平面內(nèi)繪制了兩條直線(0,0,0)到(10,0,0)和(0,10,0)到(20,5,0)。132.3直線的繪制直線的繪制GL_LINE_LOOP模式與GL_LINE_STRIP模式類似,只是會(huì)在指定的最后一個(gè)頂點(diǎn)與第一個(gè)頂點(diǎn)之間畫最后一條線。142.3直線的繪制直線的屬性線寬線型152.3直線的繪制直線的屬性線寬可用glLineWidth指定線寬:voidglLineWidth(GLfloatwidt
6、h)與點(diǎn)的大小類似,glLineWidth函數(shù)采用一個(gè)參數(shù)來指定要畫的線以象素計(jì)的近似寬度。162.3直線的繪制直線的屬性線寬可以用下面的代碼來獲取線寬范圍和它們之間的最小間隔:GLfloatsizes[2];//保存線寬的尺寸范圍GLfloatstep;//保存線寬尺寸的最小間隔glGetFloarv(GL_LINE_WIDTH_RANGE,sizes);glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&step);數(shù)組sizes中保存了glLineWidth的最小有效值和最大有效值,而變量step將保存線寬之間允許的最小增量。OpenGL規(guī)范只要
7、求支持一種線寬:1.0。Microsoft的OpenGL實(shí)現(xiàn)允許線寬從0.5到10.0,最小增量為0.125。172.3直線的繪制直線的屬性線型可以用虛線或短劃線模式創(chuàng)建直線,需要先調(diào)用:glEnable(GL_LINE_STIPPLE);然后,建立用于畫線的模式:glLineStipple(GLintfactor,GLushortpattern);參數(shù)pattern是一個(gè)16位值,指定畫線時(shí)所用的模式,逆向使用。每一位代表線段的一部分是開還是關(guān)。默認(rèn)情況下,每一位對(duì)應(yīng)一個(gè)象素。參數(shù)fact