OpenGL学习笔记

您所在的位置:网站首页 opengl绘制图形原理 OpenGL学习笔记

OpenGL学习笔记

2023-03-20 02:35| 来源: 网络整理| 查看: 265

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

点的绘制

点是最基本的图元,调用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)为正面


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3