从零开始PyopenGL(1): 简单图形绘制
程序员文章站
2022-06-15 12:37:21
...
不多废话上代码,注释应该很清楚了
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/3/23 16:25
# @Author : Barry
# @Site :
# @File : learn.py
# @Software: PyCharm
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
import numpy as np
# 画圆
def circle(x, y, r, n):
theta = np.linspace(0, 2*np.pi, n)
x = x + r * np.cos(theta)
y = y + r * np.sin(theta)
return x, y
def plotfunc():
glClear(GL_COLOR_BUFFER_BIT) # 清除之前缓存
glPointSize(3.0) # 设置点大小
glColor3f(1.0, 0.0, 0.0) # 设置点颜色
glBegin(GL_POINTS) # 此次开始,设置此次画的几何图形
x, y = circle(0, 0, 1, 100)
for x_, y_ in zip(x, y):
glVertex2f(x_, y_)
glEnd() # 此次结束
glFlush() # 刷新屏幕
if __name__ == '__main__':
glutInit(sys.argv) #初始化
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB) #设置显示模式
glutInitWindowPosition(100, 100) #窗口打开的位置,左上角坐标在屏幕坐标
glutInitWindowSize(900, 600) #窗口大小
glutCreateWindow(b"Function Plotter") #窗口名字,二进制
glutDisplayFunc(plotfunc) #设置当前窗口的显示回调
glClearColor(1.0, 1.0, 1.0, 1.0) # 设置背景颜色
gluOrtho2D(-5.0, 5.0, -5.0, 5.0) # 设置显示范围
glutMainLoop() # 启动循环
主函数基本不需要变,其中glutInitDisplayMode的可选参数有
GLUT_RGB |
0x0000 |
指定 RGB 颜色模式的窗口 |
GLUT_RGBA |
0x0000 |
指定 RGBA 颜色模式的窗口 |
GLUT_INDEX |
0x0001 |
指定颜色索引模式的窗口 |
GLUT_SINGLE |
0x0000 |
指定单缓存窗口 |
GLUT_DOUBLE |
0x0002 |
指定双缓存窗口 |
GLUT_ACCUM |
0x0004 |
窗口使用累加缓存 |
GLUT_ALPHA |
0x0008 |
窗口的颜色分量包含 alpha 值 |
GLUT_DEPTH |
0x0010 |
窗口使用深度缓存 |
GLUT_STENCIL |
0x0020 |
窗口使用模板缓存 |
GLUT_MULTISAMPLE |
0x0080 |
指定支持多样本功能的窗口 |
GLUT_STEREO |
0x0100 |
指定立体窗口 |
GLUT_LUMINANCE |
0x0200 |
窗口使用亮度颜色模型 |
不是特别清各个参数的意义,先用着吧,等以后学的更深入再说打
glBegin设置了即将绘制的几何图形,选项有....不多废话,上个图
代码的结果可以看到是一堆点组成了圆
把26行的参数改成折线
glBegin(GL_LINE_STRIP) # 此次开始,设置此次画的几何图形
这里之所以用GL_LINE_STRIP就能产生封闭的圆,是因为生成数据时候用的就是0-2π
所以换成用GL_LINE_LOOP效果是一样的
上一篇: 微信发送图文消息