说明

python的opengl库叫PyOpenGL,安装这个库的时候要注意位数版本要正确,比如我的python37是32位的,安装PyOpenGL-3.1.5-cp37-cp37m-win32.whl才行,默认pip安装的运行时可能会有问题,所以需要手动下载安装对应版本的whl。

demo

这是一个直接运行的demo

# !/usr/bin/python
# -*- coding: utf-8 -*-

# -------------------------------------------
# quidam_01.py 三维空间的世界坐标系和三角形
# -------------------------------------------

from OpenGL.GL import *
from OpenGL.GLUT import *


def draw():
    # ---------------------------------------------------------------
    glBegin(GL_LINES)  # 开始绘制线段(世界坐标系)

    # 以红色绘制x轴
    glColor4f(1.0, 0.0, 0.0, 1.0)  # 设置当前颜色为红色不透明
    glVertex3f(-0.8, 0.0, 0.0)  # 设置x轴顶点(x轴负方向)
    glVertex3f(0.8, 0.0, 0.0)  # 设置x轴顶点(x轴正方向)

    # 以绿色绘制y轴
    glColor4f(0.0, 1.0, 0.0, 1.0)  # 设置当前颜色为绿色不透明
    glVertex3f(0.0, -0.8, 0.0)  # 设置y轴顶点(y轴负方向)
    glVertex3f(0.0, 0.8, 0.0)  # 设置y轴顶点(y轴正方向)

    # 以蓝色绘制z轴
    glColor4f(0.0, 0.0, 1.0, 1.0)  # 设置当前颜色为蓝色不透明
    glVertex3f(0.0, 0.0, -0.8)  # 设置z轴顶点(z轴负方向)
    glVertex3f(0.0, 0.0, 0.8)  # 设置z轴顶点(z轴正方向)

    glEnd()  # 结束绘制线段

    # ---------------------------------------------------------------
    glBegin(GL_TRIANGLES)  # 开始绘制三角形(z轴负半区)

    glColor4f(1.0, 0.0, 0.0, 1.0)  # 设置当前颜色为红色不透明
    glVertex3f(-0.5, -0.366, -0.5)  # 设置三角形顶点
    glColor4f(0.0, 1.0, 0.0, 1.0)  # 设置当前颜色为绿色不透明
    glVertex3f(0.5, -0.366, -0.5)  # 设置三角形顶点
    glColor4f(0.0, 0.0, 1.0, 1.0)  # 设置当前颜色为蓝色不透明
    glVertex3f(0.0, 0.5, -0.5)  # 设置三角形顶点

    glEnd()  # 结束绘制三角形

    # ---------------------------------------------------------------
    glFlush()  # 清空缓冲区,将指令送往硬件立即执行


if __name__ == "__main__":
    glutInit()  # 1. 初始化glut库
    glutCreateWindow('Quidam Of OpenGL')  # 2. 创建glut窗口
    glutDisplayFunc(draw)  # 3. 注册回调函数draw()
    glutMainLoop()  # 4. 进入glut主循环

pyqtopengl

这是pyqt中QOpenGLWidget的demo

# !/usr/bin/python
# -*- coding: utf-8 -*-
from PySide2.QtWidgets import *
from OpenGL.GL import *
from OpenGL.GLUT import *


class MyOpenglWidget(QOpenGLWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

    def initializeGL(self):
        pass

    def paintGL(self):
        glBegin(GL_LINES)  # 开始绘制线段(世界坐标系)

        # 以红色绘制x轴
        glColor4f(1.0, 0.0, 0.0, 1.0)  # 设置当前颜色为红色不透明
        glVertex3f(-0.8, 0.0, 0.0)  # 设置x轴顶点(x轴负方向)
        glVertex3f(0.8, 0.0, 0.0)  # 设置x轴顶点(x轴正方向)

        # 以绿色绘制y轴
        glColor4f(0.0, 1.0, 0.0, 1.0)  # 设置当前颜色为绿色不透明
        glVertex3f(0.0, -0.8, 0.0)  # 设置y轴顶点(y轴负方向)
        glVertex3f(0.0, 0.8, 0.0)  # 设置y轴顶点(y轴正方向)

        # 以蓝色绘制z轴
        glColor4f(0.0, 0.0, 1.0, 1.0)  # 设置当前颜色为蓝色不透明
        glVertex3f(0.0, 0.0, -0.8)  # 设置z轴顶点(z轴负方向)
        glVertex3f(0.0, 0.0, 0.8)  # 设置z轴顶点(z轴正方向)

        glEnd()  # 结束绘制线段
        pass

    def resizeGL(self, w, h):
        pass

参考

https://blog.csdn.net/xufive/article/details/86565130
https://doc.qt.io/qtforpython/PySide2/QtWidgets/QOpenGLWidget.html?highlight=qopenglwidget

最后修改:2020 年 06 月 02 日
你的赞赏是我前进的动力