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)为正面

猜你喜欢

转载自blog.csdn.net/qq_41140138/article/details/100802007
今日推荐