OpenGL学习笔记 —— 二维图形绘制

本文深入讲解OpenGL绘图机制,涵盖点、线、多边形的绘制方法,包括点的大小调整、线宽设置、虚线绘制及多边形填充与轮廓勾勒技巧,适合初学者及进阶学习者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二维图形的绘制主要包含点、线及各种多边形的绘制,需要考虑图形的形状,边的特性及图形颜色的填充。


点的绘制

点是最基本的图元,调用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)为正面
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值