从零开始PyopenGL(1): 简单图形绘制

不多废话上代码,注释应该很清楚了
#!/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效果是一样的



猜你喜欢

转载自blog.csdn.net/qq_15602569/article/details/79670880