OpenGL學習筆記 —— 二維圖形繪製

二維圖形的繪製主要包含點、線及各種多邊形的繪製,需要考慮圖形的形狀,邊的特性及圖形顏色的填充。


點的繪製

點是最基本的圖元,調用glBegin時參數爲GL_POINTS,尺寸可以通過glPointSize()來設定,默認尺寸爲1px

def display():
	glClear(GL_COLOR_BUFFER_BIT)

	glPointSize(8)		# 放在glBegin外面
	glBegin(GL_POINTS)
	glColor3f(1.0, 1.0, 1.0)
	glVertex2f(0, -0.5)
	glColor3f(1.0, 0.0, 0.0)
	glVertex2f(0, 0.5)
	glColor3f(1.0, 1.0, 0.0)
	glVertex2f(-0.5, 0)
	glColor3f(0.0, 1.0, 0.0)
	glVertex2f(0.5, 0)
	glEnd()

	glFlush()


線的繪製

在glbegin()和glEnd()之間可以定義多條直線,每兩個點構成一條直線

def display():
	glClear(GL_COLOR_BUFFER_BIT)

	glLineWidth(3)		# 設置線寬
	glBegin(GL_LINES)
	glVertex2f(0, -0.5)
	glVertex2f(0, 0.5)
	glVertex2f(-0.5, 0)
	glVertex2f(0.5, 0)
	glEnd()

	glFlush()

此外,我們也可以啓用OpenGL特性,如繪製虛線(點劃模式)
函數 glLineStipple(factor, patter) 定義了一個16位模式,若某一位爲1,則該像素被繪製,否則不繪製
函數 glEnable(feature) 爲啓用OpenGL特性,使用點劃模式前需啓用特性
對上面的代碼就行修改就可以得到虛線了

def display():
	glClear(GL_COLOR_BUFFER_BIT)

	glLineWidth(3)
	glLineStipple(3, 0xcccc)
	glEnable(GL_LINE_STIPPLE)	# 允許開啓點劃模式
	glBegin(GL_LINES)
	glVertex2f(0, -0.5)
	glVertex2f(0, 0.5)
	glVertex2f(-0.5, 0)
	glVertex2f(0.5, 0)
	glEnd()

	glFlush()

#cccc表示爲1100 1100 1100 1100,其中每一個1被連續繪製3次,0連續不被繪製,最後得到寬度爲3px,需西安每段長度爲3px的虛線:



多邊形的繪製

下面繪製一個四邊形,描繪出邊,可以先繪製四邊形並填充,在繪製一個無填充的四邊形,兩者疊加:

def square():
	glLineWidth(3)				# 放在glBegin外面
	glBegin(GL_POLYGON)
	glVertex2f(0.5, 0)
	glVertex2f(0, 0.5)
	glVertex2f(-0.5, 0)
	glVertex2f(0, -0.5)
	glEnd()

def display():
	glClear(GL_COLOR_BUFFER_BIT)

	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
	glColor3f(0.5, 0.8, 0.7)
	square()
	
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
	glColor3f(1.0, 1.0, 1.0)
	square()

	glFlush()

效果圖:

圖形填充:繪製面的時候可以設置填充
glPolygonMode(face, mode)

參數 描述
face 可以取GL_FRONT、GL_FRONT_AND_BACK,指定繪製的面
mode 可以取GL_FILL、GL_LINE和GL_POINT表示如何繪製

點劃模式:也可以設置多邊形的點劃模式:

glPolygonStipple(5, #cccc)
glEnable(GL_POLYGON_STIPPLE)

設置方向:可以設置圖形的正面方向,默認以點的逆時針排序爲正面方向

glFrontFace(GL_CCW)		# 以逆時針爲正面
glFrontFace(GL_CW)		# 以順時針(clockwise)爲正面
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章