pyopengl全解析-1

本文介绍了如何使用PyOpenGL进行2D和3D图形渲染,包括安装步骤、库的导入、创建不同类型的窗口(2D与3D)以及绘制经典的犹他茶壶示例。适合初学者快速上手OpenGL在Python中的应用。

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

前言

跟新速度会稍慢一些,因为我有项目要做,请各位看官不要着急哈~
比较复杂的3d可以参考ursina

开始

二维绘图推荐使用pygame,请需要2d绘制的同学们去番外篇看看。

简介

PyOpenGL是OpenGL的python封装,所以想要了解PyOpenGL得先知道OpenGL是什么:

OpenGL(Open Graphics Library)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口,由美国硅图公司(SGI)于1992年6月30日发布。该接口通常用于与图形处理单元交互,以实现硬件加速。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。
                                                                  ——来自搜狗百科

安装
sudo pip install pyopengl

即可

注意⚠️

PyOpenGL是它的名字pyopengl是它的包名OpenGL调用时使用的名字

导入库
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

创建我们的窗口

创建一个只需要2d渲染的PyOpenGL窗口,推荐直接复制粘贴:

w,h = <size>
glutInit()
glutInitDisplayMode(GLUT_RGBA|GLUT_SINGLE)
glutInitWindowSize(w,h)
glutCreateWindow(b"<title>")
glutDisplayFunc(...)
glutIdleFunc(...)
glClearColor(0.0, 0.0, 0.0, 1.0)
gluOrtho2D(-1.0, 1.0, -1.0, 1.0)
glutMainLoop()

其中<size> 填入长和宽,用,分割。<title>填入窗口标题。...(两个...填如相同的函数即可)是 渲染用的函数。
可以适当删改代码

而创建一个3d渲染的窗口(高能干货预警):

w,h = <size>
glutInit()
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
glutInitWindowSize(w,h)
glutCreateWindow(b'<title>')
glEnable(GL_DEPTH_TEST)
glEnable(GL_TEXTURE_2D)
glClearColor(1.0, 1.0, 1.0, 0.0)
glClearDepth(1.0)
glDepthFunc(GL_LESS)
glShadeModel(GL_SMOOTH)
glEnable(GL_CULL_FACE)
glCullFace(GL_BACK)
glEnable(GL_POINT_SMOOTH)
glEnable(GL_LINE_SMOOTH)
glEnable(GL_POLYGON_SMOOTH)
glMatrixMode(GL_PROJECTION)
glHint(GL_POINT_SMOOTH_HINT,GL_NICEST)
glHint(GL_LINE_SMOOTH_HINT,GL_NICEST)
glHint(GL_POLYGON_SMOOTH_HINT,GL_FASTEST)
glLoadIdentity()
gluPerspective(45.0,w / h, 0.1, 100.0)
glMatrixMode(GL_MODELVIEW)

需要填入的东西同上,可以适当删改代码

绘制我们的犹他茶壶

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

def drawFunc():
   glClear(GL_COLOR_BUFFER_BIT)
   glRotatef(1, 0, 1, 0)
   glutWireTeapot(0.5)
   glFlush()

glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(400, 400)
glutCreateWindow(b"First")
glutDisplayFunc(drawFunc)
glutIdleFunc(drawFunc)
glutMainLoop()

很显然,如此简单的程序并不需要那么复杂的初始化。

结果:犹他茶壶1犹他茶壶2



作者

hit-road

拜拜,下课!
回到顶部

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值