文章目录
- 1 简介
- 2 安装
- 3 快速体验
- 3.1 熟悉的风格
- 3.2 Colorbar
- 3.3 光照效果
- 3.4 让模型动起来
- 3.5 定制着色器
- 3.6 三维曲面重建
- 3.7 生成动画或视频文件
- 4 在其他GUI库中使用WxGL
- 4.1 与wxPython集成
- 4.2 与PyQt集成
- 5 API Reference
- 5.1 常量
- 5.2 函数
- wxgl.font_list
- wxgl.color_list
- wxgl.cm_list
- wxgl.cmap
- 5.3 光照情景模式
- wxgl.BaseLight
- wxgl.SunLight
- wxgl.LampLight
- wxgl.SkyLight
- wxgl.SphereLight
- 5.4 wxgl.Texture
- wxgl.Texture.create_texture
- 5.5 wxgl.Model
- wxgl.Model.add_shader
- wxgl.Model.add_texture
- wxgl.Model.set_ae
- wxgl.Model.set_argument
- wxgl.Model.set_cam_pos
- wxgl.Model.set_color
- wxgl.Model.set_cull_mode
- wxgl.Model.set_fill_mode
- wxgl.Model.set_line_style
- wxgl.Model.set_model_matrix
- wxgl.Model.set_normal
- wxgl.Model.set_picked
- wxgl.Model.set_proj_matrix
- wxgl.Model.set_psize
- wxgl.Model.set_slide
- wxgl.Model.set_texcoord
- wxgl.Model.set_text_size
- wxgl.Model.set_timestamp
- wxgl.Model.set_vertex
- wxgl.Model.set_view_matrix
- wxgl.Model.verify
- 5.6 wxgl.Scheme
- wxgl.Scheme.axes
- wxgl.Scheme.circle
- wxgl.Scheme.colorbar
- wxgl.Scheme.cone
- wxgl.Scheme.cruise
- wxgl.Scheme.cube
- wxgl.Scheme.cylinder
- wxgl.Scheme.grid
- wxgl.Scheme.isosurface
- wxgl.Scheme.line
- wxgl.Scheme.lines
- wxgl.Scheme.mesh
- wxgl.Scheme.model
- wxgl.Scheme.scatter
- wxgl.Scheme.sphere
- wxgl.Scheme.surface
- wxgl.Scheme.text
- wxgl.Scheme.text3d
- wxgl.Scheme.title
- wxgl.Scheme.torus
- wxgl.Scheme.xrange
- wxgl.Scheme.yrange
- wxgl.Scheme.zrange
- 5.7 wxgl.App
- wxgl.App.save_fig
- wxgl.App.show
- 5.8 wxgl.wxscene.WxScene
- wxgl.wxscene.WxScene.capture
- wxgl.wxscene.WxScene.get_buffer
- wxgl.wxscene.WxScene.home
- wxgl.wxscene.WxScene.pause
- wxgl.wxscene.WxScene.set_visible
- 5.9 wxgl.qtscene.QtScene
- wxgl.qtscene.QtScene.capture
- wxgl.qtscene.QtScene.get_buffer
- wxgl.qtscene.QtScene.home
- wxgl.qtscene.QtScene.pause
- wxgl.qtscene.QtScene.set_visible
- wxgl.qtscene.QtScene.clear_buffer
1 简介
WxGL是一个基于PyOpenGL的跨平台三维数据快速可视化工具包,提供类似Matplotlib风格的应用方式。WxGL也可以集成到wxPython或PyQt6中实现更多的功能和控制。
WxGL提供了一套简洁易用、对用户友好的API,将OpenGL的复杂概念封装起来,使得用户可以更加专注于数据的处理,而无需在3D显示方面耗费精力。WxGL还提供了着色器语言接口,允许用户定制着色器,以应对特殊的应用需求。
作为开源项目,WxGL遵循MIT开源软件许可协议。使用、复制、修改本软件以及出版发行、再授权、贩售本软件,须以接受MIT授权协议的约束为前提。
项目地址
中文文档
2 安装
WxGL模块使用pip命令安装。
pip install wxgl
以下模块为WxGL所依赖,如果当前系统没有安装或者版本不满足要求,安装过程将同时安装或更新它们。
- pyopengl - 推荐版本:3.1.5或更高
- numpy - 推荐版本:1.18.2或更高
- matplotlib - 推荐版本:3.1.2或更高
- pyqt6 - 推荐版本:6.3.0或更高
- pillow - 推荐版本:8.2.0或更高
- freetype-py - 推荐版本:2.2.0或更高
- imageio - 推荐版本:2.22.0或更高
- imageio-ffmpeg - 推荐版本:0.4.8或更高
- webp - 推荐版本:0.1.5或更高
WxGL使用WxPython或PyQt6作为显示后端,上述安装过程自动安装了PyQt6模块。如果想使用WxPython作为显示后端,请自行安装。
在Windows和macOS平台上,可使用如下命令WxPython模块。
pip install -U wxPython
在Linux平台上,以Ubuntu为例,可使用如下命令WxPython模块。
pip install -U -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04 wxPython
3 快速体验
3.1 熟悉的风格
下面这几行代码,绘制了一个中心在三维坐标系原点半径为1的纯色圆球。忽略模块名的话,这些代码和Matplotlib的风格非常相似。
import wxgl
app = wxgl.App()
app.sphere((0,0,0), 1, color='cyan')
app.title('快速体验:$x^2+y^2+z^2=1$')
app.show()
3.2 Colorbar
对于数据快速可视化工具来说,Colorbar是必不可少的。下面的代码演示了Colorbar最简单的用法。
import numpy as np
import wxgl
z, x = np.mgrid[-np.pi:np.pi:51j, -np.pi:np.pi:51j]
y = np.sin(x) + np.cos(z)
cm = 'viridis' # WxGL的颜色映射方案继承自Matplotlib
app = wxgl.App()
app.title('网格曲面')
app.mesh(x, y, z, data=y, cm=cm, fill=False)
app.colorbar((y.min(), y.max()), cm=cm, ff=lambda v:'%.2f'%v) # ff用于设置ColorBar刻度标注的格式化函数
app.show()
3.3 光照效果
WxGL提供了BaseLight(基础光照模型)、SunLight(太阳光照模型)、LampLight(点光源光照模型)、SkyLight(户外光照模型)、SphereLight(球谐光照模型)等多种光照方案,配合漫反射系数、镜面反射系数、高光系数、透光系数等参数,可模拟出不同的质感。即使不设置light参数,WxGL的模型也都使用了默认的光照效果。下面的代码使用light参数演示了不同光照效果下的球环模型。
import wxgl
app = wxgl.App()
app.text('太阳光', (-5,7.5,0), align='center')
app.torus((-5,4,0), 1, 3, vec=(0,1,1), light=wxgl.SunLight())
app.text('灯光', (5,7.5,0), align='center')
app.torus((5,4,0), 1, 3, vec=(0,1,1), light=wxgl.LampLight())
app.text('户外光', (-5,-0.5,0), align='center')
app.torus((-5,-4,0), 1, 3, vec=(0,1,1), light=wxgl.SkyLight())
app.text('球谐光', (5,-0.5,0), align='center')
app.torus((5,-4,0), 1, 3, vec=(0,1,1), light=wxgl.SphereLight(5))
app.show()
3.4 让模型动起来
通过transform参数传递一个以渲染时长为参数的函数给模型,可以实现复杂的模型动画。该函数返回一个由一系列旋转、位移和缩放动作组成的元组:
- 旋转用4元组表示,前3个元素是旋转轴,第4个元素是旋转角度,旋转方向遵从右手定则
- 位移用3元组表示,分别表示模型在xyz轴上的位移距离
- 缩放系数用数值表示
下面这几行代码,绘制了一个半径为1的地球,并以20°/s的角速度绕地轴自转。配合太阳光照效果和模型动画,可以清晰地看到晨昏分界线的变化。
import numpy as np
import wxgl
r = 1 # 地球半径
gv, gu = np.mgrid[np.pi/2:-np.pi/2:91j, 0:2*np.pi:361j] # 纬度和经度网格
xs = r * np.cos(gv)*np.cos(gu)
ys = r * np.cos(gv)*np.sin(gu)
zs = r * np.sin(gv)
light = wxgl.SunLight(direction=(-1,1,0), ambient=(0.1,0.1,0.1)) # 太阳光照向左前方,暗环境光
tf = lambda t : ((0, 0, 1, (0.02*t)%360), ) # 以20°/s的角速度绕y逆时针轴旋转(t是以毫秒为单位的渲染时长)
app = wxgl.App(haxis='z') # 以z轴为高度轴
app.title('自转的地球')
app.mesh(xs, ys, zs, texture='res/earth.jpg', light=light, transform=tf)
app.show()
3.5 定制着色器
除了内置的绘图函数,WxGL还提供了GLSL接口,允许用户定制着色器代码。下面的代码演示了使用定制的顶点着色器和片元着色器的基本流程。
import numpy as np
import wxgl
vshader = """
#version 330 core
in vec4 a_Position;
in vec3 a_Normal;
uniform mat4 u_ProjMatrix;
uniform mat4 u_ViewMatrix;
uniform mat4 u_ModelMatrix;
out vec3 v_Normal;
void main() {
gl_Position = u_ProjMatrix * u_ViewMatrix * u_ModelMatrix * a_Position;
mat4 NormalMatrix = transpose(inverse(u_ModelMatrix));
v_Normal = normalize(vec3(NormalMatrix * vec4(a_Normal, 1.0)));
}
"""
fshader = """
#version 330 core
uniform vec3 u_LightDir;
uniform sampler1D u_Texture;
in vec3 v_Normal;
void main() {
vec3 lightDir = normalize(u_LightDir);
float diffuseCos = max(0.0, dot(lightDir, v_Normal));
gl_FragColor = texture1D(u_Texture, diffuseCos);
}
"""
r, R = 1, 3
gv, gu = np.mgrid[180:-180:181j, 0:360:181j]
gv, gu = np.radians(gv), np.radians(gu)
xs = (R + r * np.cos(gv)) * np.cos(gu)
zs = -(R + r * np.cos(gv)) * np.sin(gu)
ys = r * np.sin(gv)
vs = np.dstack((xs, ys, zs))
rows, cols = vs.shape[:2]
vs = vs.reshape(-1, 3)
idx = np.arange(rows*cols).reshape(rows, cols)
idx_a, idx_b, idx_c, idx_d = idx[:-1,:-1], idx[1:,:-1], idx[1:,1:], idx[:-1, 1:]
idx = np.int32(np.dstack((idx_a, idx_b, idx_d, idx_c, idx_d, idx_b)).ravel())
vs = vs[idx]
a, b, c = vs[::3], vs[1::3], vs[2::3]
n = np.repeat(np.cross(b-a, a-c), 3, axis=0)
normal = np.zeros((rows*cols, 3), dtype=np.float32)
idx_arg = np.argsort(idx)
rise = np.where(np.diff(idx[idx_arg])==1)[0] + 1
rise = np.hstack((0,rise,len(idx)))
for i in range(rows*cols):
normal[i] = np.sum(n[idx_arg[rise[i]:rise[i+1]]], axis=0)
normal = normal.reshape(rows, cols, -1)
normal[0] += normal[-1]
normal[-1] = normal[0]
normal[:,0] += normal[:,-1]
normal[:,-1] = normal[:,0]
normal = normal.reshape(-1, 3)[idx]
im = np.uint8(np.stack((np.arange(256), np.zeros(256), np.zeros(256)), axis=1))
texture = wxgl.Texture(im, ttype=wxgl.TEXTURE_1D, s_tile=wxgl.GL_CLAMP_TO_EDGE)
m = wxgl.Model(wxgl.TRIANGLES, vshader, fshader)
m.set_vertex('a_Position', vs)
m.set_normal('a_Normal', normal)
m.set_argument('u_LightDir', (-5,-1,-5))
m.add_texture('u_Texture', texture)
m.set_proj_matrix('u_ProjMatrix')
m.set_view_matrix('u_ViewMatrix')
m.set_model_matrix('u_ModelMatrix')
m.set_cull_mode('back')
app = wxgl.App(elev=20, bg='#d0d0d0')
app.title('以法向量和光线向量的点积作为1D纹理坐标')
app.model(m)
app.show()
3.6 三维曲面重建
WxGL实现了基于MarchingCube算法的三维曲面重建。下面例子中使用GitHub本项目example路径下的头部CT图片完成头部三维重建。
import numpy as np
from PIL import Image
import wxgl
layers = list()
for i in range(109): # 读取109张头部CT断层扫描片,只保留透明通道
im = np.array(Image.open('res/headCT/head%d.png'%i))
layers.append(np.fliplr(im[...,3]))
data = np.stack(layers, axis=0)
app = wxgl.App(haxis='z', bg='#60e0f0')
app.isosurface(data, data.max()/8, color='#CCC6B0', xr=(-0.65,0.65), yr=(-1,1), zr=(-1,1))
app.title('基于MarchingCube算法的三维重建演示')
app.grid() # 显示网格
app.cruise(lambda t : {'azim':(0.02*t)%360}) # 相机以20°/s的角速度逆时针环绕模型
app.show()
3.7 生成动画或视频文件
除了显示画布的show方法,wxgl.App还提供了保存画布的savefig方法。savefig不仅可以将当前OpengGL缓冲区的内容保存为.png或.jpg类型的图像文件,还可以生成.gif/.webp/.mp4/.avi等动画或视频文件。
下面这段代码绘制了一大一小两个自转的圆球,小球同时围绕大球公转。运行代码,将会生成每秒25帧共计200帧的mp4格式的视频文件。
import wxgl
tf_1 = lambda t:((0, 1, 0, (0.01*t)%360),) # 大球自转速度10°/s
def tf_2(t):
theta = -(0.05*t)%360 # 小球公转和自转都是-50°/s
rotate = (0, 1, 0, theta) # 小球自转
theta = np.radians(theta) # 角度转弧度
r = 1 # 小球公转半径
shift = (r*np.cos(theta), 0, -r*np.sin(theta)) # 小球公转
return (rotate, shift)
app = wxgl.App()
app.sphere((0,0,0), 0.8, fill=False, transform=tf_1)
app.sphere((0,0,0), 0.2, fill=False, transform=tf_2)
app.savefig('capture/revolve.mp4', fps=25, frames=200)
4 在其他GUI库中使用WxGL
WxGL提供了wxgl.wxscene.WxScene和wxgl.qtscene.QtScene两个三维场景类,分别用于在wxPython和PyQt中集成WxGL。
4.1 与wxPython集成
场景类wxgl.wxscene.WxScene是wx.glcanvas.GLCanvas的派生类,因此可以无缝地在wxPython中使用该类。三维绘图功能封装在wxgl.Scheme中,只需要将一个Scheme类实例传到场景类中即可显示三维绘图结果。
import os
import wx
import numpy as np
import wxgl
class MainFrame(wx.Frame):
"""桌面程序主窗口类"""
def __init__(self):
"""构造函数"""
wx.Frame.__init__(self, None, -1, '在WxPython中使用WxGL', size=(1200,800), style=wx.DEFAULT_FRAME_STYLE)
self.Center()
self.SetBackgroundColour((224, 224, 224))
self.scene = wxgl.wxscene.WxScene(self, self.draw())
self.visible = True
btn_home = wx.Button(self, -1, '复位', size=(100, -1))
btn_animate = wx.Button(self, -1, '启动/停止', size=(100, -1))
btn_visible = wx.Button(self, -1, '隐藏/显示', size=(100, -1))
btn_save = wx.Button(self, -1, '保存', size=(100, -1))
sizer_btn = wx.BoxSizer(wx.VERTICAL)
sizer_btn.Add(btn_home, 0, wx.TOP|wx.BOTTOM, 20)
sizer_btn.Add(btn_animate, 0, wx.TOP|wx.BOTTOM, 20)
sizer_btn.Add(btn_visible, 0, wx.TOP|wx.BOTTOM, 20)
sizer_btn.Add(btn_save, 0, wx.TOP|wx.BOTTOM, 20)
sizer_max = wx.BoxSizer()
sizer_max.Add(self.scene, 1, wx.EXPAND|wx.LEFT|wx.TOP|wx.BOTTOM, 5)
sizer_max.Add(sizer_btn, 0, wx.ALL, 20)
self.SetAutoLayout(True)
self.SetSizer(sizer_max)
self.Layout()
self.Bind(wx.EVT_BUTTON, self.on_home, btn_home)
self.Bind(wx.EVT_BUTTON, self.on_animate, btn_animate)
self.Bind(wx.EVT_BUTTON, self.on_visible, btn_visible)
self.Bind(wx.EVT_BUTTON, self.on_save, btn_save)
def draw(self):
"""绘制网格球和圆柱的组合体"""
tf = lambda t : ((0, 1, 0, (0.03*t)%360), )
sch = wxgl.Scheme()
sch.sphere((0,0,0), 1, fill=False)
sch.cylinder((-1.2,0,0), (1.2,0,0), 0.3, color='cyan', transform=tf, name='cudgel')
sch.circle((-1.2,0,0), 0.3, vec=(-1,0,0), color='cyan', transform=tf, name='cudgel')
sch.circle((1.2,0,0), 0.3, vec=(1,0,0), color='cyan', transform=tf, name='cudgel')
sch.axes()
return sch
def on_home(self, evt):
"""点击复位按钮"""
self.scene.home()
def on_animate(self, evt):
"""点击启动/停止按钮"""
self.scene.pause()
def on_visible(self, evt):
"""点击隐藏/显示按钮"""
self.visible = not self.visible
self.scene.set_visible('cudgel', self.visible)
def on_save(self, evt):
"""点击保存按钮"""
im = self.scene.get_buffer()
wildcard = 'PNG files (*.png)|*.png|JPEG file (*.jpg)|*.jpg'
dlg = wx.FileDialog(self, message='保存为文件', wildcard=wildcard, style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT)
dlg.SetFilterIndex(0)
if dlg.ShowModal() == wx.ID_OK:
fn = dlg.GetPath()
name, ext = os.path.splitext(fn)
if ext != '.png' and ext != '.jpg':
ext = ['.png', '.jpg'][dlg.GetFilterIndex()]
if ext == '.jpg':
im.convert('RGB').save('%s%s'%(name, ext))
else:
im.save('%s%s'%(name, ext))
dlg.Destroy()
if __name__ == '__main__':
app = wx.App()
frame = MainFrame()
frame.Show()
app.MainLoop()
4.2 与PyQt集成
场景类wxgl.qtscene.QtScene是PyQt6.QtOpenGLWidgets.QOpenGLWidget的派生类,因此可以无缝地在PyQt6中使用该类。三维绘图功能封装在wxgl.Scheme中,只需要将一个Scheme类实例传到场景类中即可显示三维绘图结果。
import sys
import os, sys
import numpy as np
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QFileDialog
from PyQt6.QtCore import Qt
import wxgl
class MyWindow(QWidget):
"""从QWidget类派生的桌面应用程序窗口类"""
def __init__(self):
"""构造函数"""
super().__init__()
self.setWindowTitle('在PyQt中使用WxGL')
self.setGeometry(0, 0, 1200, 800) # 设置窗位置和大小
self.scene = wxgl.qtscene.QtScene(self, self.draw())
self.visible = True
btn_home = QPushButton('复位')
btn_animate = QPushButton('启动/停止')
btn_visible = QPushButton('隐藏/显示')
btn_save = QPushButton('保存')
vbox = QVBoxLayout()
vbox.addSpacing(40)
vbox.addWidget(btn_home)
vbox.addSpacing(40)
vbox.addWidget(btn_animate)
vbox.addSpacing(40)
vbox.addWidget(btn_visible)
vbox.addSpacing(40)
vbox.addWidget(btn_save)
vbox.addStretch(1)
hbox = QHBoxLayout()
hbox.setSpacing(20)
hbox.setContentsMargins(10,10,20,10)
hbox.addWidget(self.scene, stretch=1)
hbox.addLayout(vbox)
self.setLayout(hbox)
self.show()
btn_home.clicked.connect(self.on_home)
btn_animate.clicked.connect(self.on_animate)
btn_visible.clicked.connect(self.on_visible)
btn_save.clicked.connect(self.on_save)
def closeEvent(self, evt):
self.scene.clear_buffer()
def draw(self):
"""绘制网格球和圆柱的组合体"""
tf = lambda t : ((0, 1, 0, (0.03*t)%360), )
sch = wxgl.Scheme()
sch.sphere((0,0,0), 1, fill=False)
sch.cylinder((-1.2,0,0), (1.2,0,0), 0.3, color='cyan', transform=tf, name='cudgel')
sch.circle((-1.2,0,0), 0.3, vec=(-1,0,0), color='cyan', transform=tf, name='cudgel')
sch.circle((1.2,0,0), 0.3, vec=(1,0,0), color='cyan', transform=tf, name='cudgel')
sch.axes()
return sch
def on_home(self):
"""点击复位按钮"""
self.scene.home()
def on_animate(self):
"""点击启动/停止按钮"""
self.scene.pause()
def on_visible(self):
"""点击隐藏/显示按钮"""
self.visible = not self.visible
self.scene.set_visible('cudgel', self.visible)
def on_save(self):
"""点击保存按钮"""
self.scene.stop_idle()
im = self.scene.get_buffer()
file_type = 'PNG files (*.png);;JPEG file (*.jpg)'
fname, fext = QFileDialog.getSaveFileName(self, '保存文件', directory=os.getcwd(), filter=file_type)
name, ext = os.path.splitext(fname)
if name:
if ext != '.png' and ext != '.jpg':
ext = '.png' if fext == 'PNG files (*.png)' else '.jpg'
if ext == '.jpg':
im.convert('RGB').save('%s%s'%(name, ext))
else:
im.save('%s%s'%(name, ext))
self.scene.start_idle()
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MyWindow()
sys.exit(app.exec())
5 API Reference
5.1 常量
WxGL内置了常用的OpenGL常量。
- wxgl.VERTEX_SHADER
- wxgl.TESS_CONTROL_SHADER
- wxgl.TESS_EVALUATION_SHADER
- wxgl.GEOMETRY_SHADER
- wxgl.FRAGMENT_SHADER
- wxgl.COMPUTE_SHADER
- wxgl.POINTS
- wxgl.LINES
- wxgl.LINE_STRIP
- wxgl.LINE_LOOP
- wxgl.TRIANGLES
- wxgl.TRIANGLE_STRIP
- wxgl.TRIANGLE_FAN
- wxgl.QUADS
- wxgl.QUAD_STRIP
- wxgl.TEXTURE_1D
- wxgl.TEXTURE_1D_ARRAY
- wxgl.TEXTURE_2D
- wxgl.TEXTURE_2D_ARRAY
- wxgl.TEXTURE_3D
- wxgl.TEXTURE_RECTANGLE
- wxgl.TEXTURE_CUBE_MAP
- wxgl.TEXTURE_CUBE_MAP_ARRAY
- wxgl.TEXTURE_BUFFER
- wxgl.NEAREST
- wxgl.LINEAR
- wxgl.NEAREST_MIPMAP_NEAREST
- wxgl.LINEAR_MIPMAP_NEAREST
- wxgl.NEAREST_MIPMAP_LINEAR
- wxgl.LINEAR_MIPMAP_LINEAR
- wxgl.REPEAT
- wxgl.MIRRORED_REPEAT
- wxgl.CLAMP_TO_EDGE
5.2 函数
wxgl.font_list
wxgl.font_list()
返回可用字体列表。
wxgl.color_list
wxgl.color_list()
返回可用颜色列表。
wxgl.cm_list
wxgl.cm_list()
返回颜色映射方案(调色板)列表。
wxgl.cmap
wxgl.cmap(data, cm, drange=None, alpha=None, invalid=np.nan, invalid_c=(0,0,0,0))
数据映射为颜色。
data - 数据
cm - 颜色映射方案(调色板)
drange - 数据动态范围,None表示使用data的动态范围
alpha - 透明度,None表示不改变当前透明度
invalid - 无效数据的标识,默认nan
invalid_c - 无效数据的颜色,默认(0,0,0,0)
5.3 光照情景模式
wxgl.BaseLight
wxgl.BaseLight(ambient=(1.0,1.0,1.0))
基础光照情景模式。
ambient - 环境光颜色,默认(1.0,1.0,1.0)
wxgl.SunLight
wxgl.SunLight(direction=(0.0,0.0,-1.0), lightcolor=(1.0,1.0,1.0), ambient=(0.3,0.3,0.3), **kwds)
太阳光照情景模式。
direction - 太阳光方向
lightcolor - 太阳光颜色
ambient - 环境光颜色
kwds - 关键字参数
diffuse - 漫反射系数:值域范围[0.0, 1.0],数值越大,表面越亮。默认值0.8
specular - 镜面反射系数:值域范围[0.0, 1.0],数值越大,高光越亮。默认值0.6
shiny - 高光系数:值域范围[1, 3000],数值越大,高光区域越小。默认值50
pellucid - 透光系数:值域范围[0.0,1.0],数值越大,背面越亮。默认值0.5
wxgl.LampLight
wxgl.LampLight(lamp=(0.0,0.0,2.0), lightcolor=(1.0,1.0,1.0), ambient=(0.5,0.5,0.5), **kwds)
定位光照情景模式。
lamp - 光源位置
lightcolor - 光源颜色
ambient - 环境光颜色
kwds - 关键字参数
diffuse - 漫反射系数:值域范围[0.0, 1.0],数值越大,表面越亮。默认值0.8
specular - 镜面反射系数:值域范围[0.0, 1.0],数值越大,高光越亮。默认值0.6
shiny - 高光系数:值域范围[1, 3000],数值越大,高光区域越小。默认值50
pellucid - 透光系数:值域范围[0.0,1.0],数值越大,背面越亮。默认值0.5
wxgl.SkyLight
wxgl.SkyLight(direction=(0.0,-1.0,0.0), sky=(1.0,1.0,1.0), ground=(0.3,0.3,0.3))
户外光照情景模式。
direction - 主光方向
sky - 天光颜色
ground - 地光颜色
wxgl.SphereLight
wxgl.SphereLight(style=0, factor=0.8)
球谐光照情景模式。
style - 情景序号,0~9,默认0
factor - 反射衰减因子,值域范围(0.0,1.0],默认0.8
5.4 wxgl.Texture
wxgl.Texture(tsrc, ttype=wxgl.GL_TEXTURE_2D, **kwds)
WxGL纹理类。
tsrc - 图像文件,或图像文件列表,或np.array数组
ttype - 纹理类型,可选项
- wxgl.TEXTURE_1D
- wxgl.TEXTURE_2D(默认)
- wxgl.TEXTURE_2D_ARRAY
- wxgl.TEXTURE_3D
kwds - 关键字参数
level - 纹理分级数,默认1
min_filter - 纹理缩小滤波器,可选项:
- wxgl.GL_NEAREST
- wxgl.GL_LINEAR
- wxgl.GL_NEAREST_MIPMAP_NEAREST(默认)
- wxgl.GL_LINEAR_MIPMAP_NEAREST
- wxgl.GL_NEAREST_MIPMAP_LINEAR
- wxgl.GL_LINEAR_MIPMAP_LINEAR
mag_filter - 纹理放大滤波器,可选项:
- wxgl.GL_NEAREST
- wxgl.GL_LINEAR(默认)
s_tile - S方向纹理铺贴方式,可选项:wxgl.GL_REPEAT(默认)|wxgl.GL_MIRRORED_REPEAT|wxgl.GL_CLAMP_TO_EDGE
t_tile - T方向纹理铺贴方式,可选项:wxgl.GL_REPEAT(默认)|wxgl.GL_MIRRORED_REPEAT|wxgl.GL_CLAMP_TO_EDGE
r_tile - R方向纹理铺贴方式,可选项:wxgl.GL_REPEAT(默认)|wxgl.GL_MIRRORED_REPEAT|wxgl.GL_CLAMP_TO_EDGE
xflip - 左右翻转,默认False
yflip - 上下翻转,默认False
wxgl.Texture.create_texture
wxgl.Texture.create_texture()
创建纹理对象。该方法通常无需用户显式调用。
5.5 wxgl.Model
wxgl.Model(gltype, vshader, fshader, **kwds)
WxGL模型类。
gltype - GL基本图元
vshader - 顶点着色器源码
fshader - 片元着色器源码
kwds - 关键字参数
visible - 模型可见性,默认True
opacity - 模型不透明,默认True
inside - 模型显示在视锥体内,默认True
sprite - 开启点精灵,默认False
alive - 启动渲染计时器,默认False
wxgl.Model.add_shader
wxgl.Model.add_shader(shader_src, shader_type)
添加着色器。
shader_src - 着色器源码
shader_type - 着色器类型
wxgl.Model.add_texture
wxgl.Model.add_texture(var_name, texture)
添加纹理。
var_name - 纹理在着色器中的变量名
texture - wxgl.Texture对象
wxgl.Model.set_ae
wxgl.Model.set_ae(var_name)
设置相机方位角和高度角。
var_name - 相机方位角和高度角在着色器中的变量名
wxgl.Model.set_argument
wxgl.Model.set_argument(var_name, var_value)
设置变量。
var_name - 变量在着色器中的变量名
var_value - 变量值或生成变量值的函数
wxgl.Model.set_cam_pos
wxgl.Model.set_cam_pos(var_name)
设置相机位置。
var_name - 相机位置在着色器中的变量名
wxgl.Model.set_color
wxgl.Model.set_color(var_name, data)
设置顶点颜色。
var_name - 顶点颜色在着色器中的变量名
data - 顶点颜色数据
wxgl.Model.set_cull_mode
wxgl.Model.set_cull_mode(mode)
设置面剔除方式。
mode - 剔除的面:'front'|'back'
wxgl.Model.set_fill_mode
wxgl.Model.set_fill_mode(mode)
设置填充方式。
mode - 填充模式:布尔型,或'FCBC'|'FLBC'|'FCBL'|'FLBL'
wxgl.Model.set_line_style
wxgl.Model.set_line_style(width=None, stipple=None)
设置线宽和线型。
width - 线宽
stipple - 线型,重复因子(整数)和模式(16位二进制)组成的元组
wxgl.Model.set_model_matrix
wxgl.Model.set_model_matrix(var_name, mmatrix=None)
设置模型矩阵。
var_name - 模型矩阵在着色器中的变量名
mmatrix - 模型矩阵或生成模型矩阵的函数,None表示模型无几何变换
wxgl.Model.set_normal
wxgl.Model.set_normal(var_name, data)
设置顶点法向量。
var_name - 顶点法向量在着色器中的变量名
data - 顶点法向量数据
wxgl.Model.set_picked
wxgl.Model.set_picked(var_name)
设置拾取状态。
var_name - 拾取状态在着色器中的变量名
wxgl.Model.set_proj_matrix
wxgl.Model.set_proj_matrix(var_name, pmatrix=None)
设置投影矩阵。
var_name - 投影矩阵在着色器中的变量名
mmatrix - 投影矩阵或生成投影矩阵的函数,None表示使用当前投影矩阵
wxgl.Model.set_psize
wxgl.Model.set_psize(var_name, data)
设置顶点大小。
var_name - 顶点大小在着色器中的变量名
data - 顶点大小数据
wxgl.Model.set_slide
wxgl.Model.set_slide(slide)
设置幻灯片函数。
slide - 以渲染时长(ms)为参数的函数,该函数返回布尔值
wxgl.Model.set_texcoord
wxgl.Model.set_texcoord(var_name, data)
设置顶点纹理坐标。
var_name - 顶点纹理坐标在着色器中的变量名
data - 顶点纹理坐标数据
wxgl.Model.set_text_size
wxgl.Model.set_text_size(var_name, size)
设置2D文本的宽度和高度。
var_name - 变量在着色器中的变量名
size - 2D文本的宽度和高度
wxgl.Model.set_timestamp
wxgl.Model.set_timestamp(var_name)
设置渲染时间戳(以毫秒为单位的浮点数)。
var_name - 渲染时间戳在着色器中的变量名
wxgl.Model.set_vertex
wxgl.Model.set_vertex(var_name, data, indices=None)
设置顶点。
var_name - 顶点在着色器中的变量名
data - 顶点数据
indices - 顶点索引数据
wxgl.Model.set_view_matrix
wxgl.Model.set_view_matrix(var_name, vmatrix=None)
设置视点矩阵。
var_name - 视点矩阵在着色器中的变量名
vmatrix - 视点矩阵或生成视点矩阵的函数,None表示使用当前视点矩阵
wxgl.Model.verify
wxgl.Model.verify()
验证模型数据、检查着色器源码。该方法通常无需用户显式调用。
5.6 wxgl.Scheme
wxgl.Scheme(haxis=‘y’, bg=(0.0,0.0,0.0)
应用于三维场景中的展示方案类。
haxis - 高度轴,默认y轴,可选z轴,不支持x轴
bg - 背景色,默认0.0, 0.0, 0.0)
wxgl.Scheme.axes
wxgl.Scheme.axes(name=None)
绘制三维坐标轴。
name - 部件名
wxgl.Scheme.circle
wxgl.Scheme.circle(center, r, **kwds)
绘制圆面或扇面。
center - 圆心:元组、列表或numpy数组
r - 半径:浮点型
kwds - 关键字参数
color - 颜色:浮点型元组、列表或numpy数组
arc - 弧度角范围:默认0°~360°
cell - 网格精度:默认5°
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.colorbar
wxgl.Scheme.circle(data, cm=‘viridis’, ff=str, endpoint=True)
绘制调色板。
data - 值域范围或刻度序列:长度大于1的元组或列表
cm - 调色板名称
kwds - 关键字参数
ff - 刻度标注格式化函数
endpoint - 刻度是否包含值域范围的两个端点值
wxgl.Scheme.cone
wxgl.Scheme.circle(spire, center, r, **kwds)
绘制圆锥。
spire - 锥尖:元组、列表或numpy数组
center - 锥底圆心:元组、列表或numpy数组
r - 锥底半径:浮点型
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
arc - 弧度角范围:默认0°~360°
cell - 网格精度:默认5°
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.cruise
wxgl.Scheme.cruise(func)
设置相机巡航函数。
func - 以时间t(毫秒)为参数的函数,返回包含下述key的字典
azim - 方位角:None或表达式
elev - 高度角:None或表达式
dist - 相机到OES坐标系原定的距离:None或表达式
wxgl.Scheme.cube
wxgl.Scheme.cube(center, side, **kwds)
绘制立方体。
center - 中心坐标,元组、列表或numpy数组
side - 棱长:数值或长度为3的元组、列表、numpy数组
kwds - 关键字参数
color - 颜色:浮点型元组、列表或numpy数组
vec - 立方体上表面法向量
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.cylinder
wxgl.Scheme.cylinder(c1, c2, r, **kwds)
绘制圆柱。
c1 - 圆柱端面圆心:元组、列表或numpy数组
c2 - 圆柱端面圆心:元组、列表或numpy数组
r - 圆柱半径:浮点型
kwds - 关键字参数
color - 颜色:浮点型元组、列表或numpy数组
arc - 弧度角范围:默认0°~360°
cell - 网格精度:默认5°
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.grid
wxgl.Scheme.grid(**kwds)
绘制网格和刻度。
kwds - 关键字参数
size - 文本字号,默认32
xlabel - x轴名称
ylabel - y轴名称
zlabel - z轴名称
xf - x轴标注格式化函数
yf - y轴标注格式化函数
zf - z轴标注格式化函数
name - 部件名
wxgl.Scheme.isosurface
wxgl.Scheme.isosurface(data, level, **kwds)
绘制基于MarchingCube算法的三维等值面。
data - 数据集:三维numpy数组
level - 阈值:浮点型
kwds - 关键字参数
color - 颜色:浮点型元组、列表或numpy数组
xr - 数据集对应的点的x轴的动态范围
yr - 数据集对应的点的y轴的动态范围
zr - 数据集对应的点的z轴的动态范围
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.line
wxgl.Scheme.line(vs, **kwds)
连点成线。
vs - 顶点集:元组、列表或numpy数组,shape=(n,2|3)
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
data - 数据集:元组、列表或numpy数组,shape=(n,)
cm - 调色板
width - 线宽:0.0~10.0之间,None使用默认设置
stipple - 线型
'solid' - 实线(默认)
'dashed' - 虚线
'doted' - 点线
'dash-dot' - 点虚线
loop - 首尾闭合,默认False
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列,默认None
ambient - 环境光,默认(1.0,1.0,1.0)
name - 模型或部件名
wxgl.Scheme.lines
wxgl.Scheme.lines(vs, **kwds)
绘制多条线段。
vs - 顶点集:元组、列表或numpy数组,shape=(n,2|3)
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
data - 数据集:元组、列表或numpy数组,shape=(n,)
cm - 调色板
width - 线宽:0.0~10.0之间,None使用默认设置
stipple - 线型
'solid' - 实线(默认)
'dashed' - 虚线
'doted' - 点线
'dash-dot' - 点虚线
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列,默认None
ambient - 环境光,默认(1.0,1.0,1.0)
name - 模型或部件名
wxgl.Scheme.mesh
wxgl.Scheme.mesh(xs, ys, zs, **kwds)
绘制网格面。
xs/ys/zs - 顶点坐标集:元组、列表或numpy数组,shape=(m,n),m为网格行数,n为网格列数
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
data - 数据集:元组、列表或numpy数组,shape=(m,n)
cm - 调色板
texture - 纹理图片,或2D纹理对象
quad - 使用四角图元绘制:布尔型,默认False(使用三角图元绘制)
ccw - 顶点逆时针排序的面为正面,默认True
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.model
wxgl.Scheme.model(m, name=None)
添加模型。
m - wxgl.Model类的实例
name - 模型或部件名
wxgl.Scheme.scatter
wxgl.Scheme.scatter(vs, **kwds)
绘制散列点。
vs - 顶点集:元组、列表或numpy数组,shape=(n,2|3)
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
size - 点的大小:数值或数值型元组、列表或numpy数组
data - 数据集:元组、列表或numpy数组,shape=(n,)
cm - 调色板
texture - 纹理图片,或2D纹理对象
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列,默认None
ambient - 环境光,默认(1.0,1.0,1.0)
name - 模型或部件名
wxgl.Scheme.sphere
wxgl.Scheme.sphere(center, r, **kwds)
绘制由经纬度网格生成的球。
center - 锥底圆心坐标:元组、列表或numpy数组
r - 锥底半径:浮点型
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
vec - 指向北极的向量
uarc - u方向范围:默认0°~360°
varc - v方向范围:默认-90°~90°
cell - 网格精度:默认5°
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.surface
wxgl.Scheme.surface(vs, **kwds)
绘制由三角面(默认)或四角面构成的曲面。
vs - 顶点集:元组、列表或numpy数组,shape=(n,2|3)
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
data - 数据集:元组、列表或numpy数组,shape=(n,)
cm - 调色板
texture - 纹理图片,或2D/2DArray/3D纹理对象
texcoord - 纹理坐标集:元组、列表或numpy数组,shape=(n,2|3)
quad - 使用四角图元绘制:布尔型,默认False(使用三角图元绘制)
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认True(不透明)
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.text
wxgl.Scheme.text(text, pos, **kwds)
绘制2D文字。
text - 文本字符串
pos - 文本位置:元组、列表或numpy数组,shape=(2|3,)
kwds - 关键字参数
color - 文本颜色:浮预定义颜色、十六进制颜色,或者点型元组、列表或numpy数组,None表示背景色的对比色
size - 字号:整型,默认32
align - 水平对齐方式:'left'-左对齐(默认),'center'-水平居中,'right'-右对齐
valign - 垂直对齐方式:'bottom'-底部对齐(默认),'middle'-垂直居中,'top'-顶部对齐
family - 字体:None表示当前默认的字体
weight - 字体的浓淡:'normal'-正常(默认),'light'-轻,'bold'-重
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
slide - 幻灯片函数,默认None
ambient - 环境光,默认(1.0,1.0,1.0)
name - 模型或部件名
wxgl.Scheme.text3d
wxgl.Scheme.text3d(text, box, **kwds)
绘制3D文字。
text - 文本字符串
box - 文本显示区域:左上、左下、右下、右上4个点的坐标,浮点型元组、列表或numpy数组,shape=(4,2|3)
kwds - 关键字参数
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
bg - 背景色,None表示背景透明
align - 对齐方式:'left'-左对齐(默认),'center'-水平居中,'right'-右对齐,'fill'-填充
family - 字体:None表示当前默认的字体
weight - 字体的浓淡:'normal'-正常(默认),'light'-轻,'bold'-重
size - 字号:整型,默认64。此参数影响文本显示质量,不改变文本大小
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列,默认None
light - 光照模型(默认基础光照模型)
name - 模型或部件名
wxgl.Scheme.title
wxgl.Scheme.title(title, size=32, color=None, family=None, weight=‘normal’)
设置标题。
title - 标题文本
size - 字号:整型,默认32
color - 颜色或颜色集:预定义颜色、十六进制颜色,或者浮点型元组、列表或numpy数组,值域范围[0,1]
family - 字体:None表示当前默认的字体
weight - 字体的浓淡:'normal'-正常(默认),'light'-轻,'bold'-重
wxgl.Scheme.torus
wxgl.Scheme.torus(center, r1, r2, **kwds)
绘制球环。
center - 球环中心坐标:元组、列表或numpy数组
r1 - 球半径:浮点型
r2 - 环半径:浮点型
kwds - 关键字参数
color - 颜色:浮点型元组、列表或numpy数组
vec - 环面法向量
uarc - u方向范围:默认0°~360°
varc - v方向范围:默认0°~360°
cell - 网格精度:默认5°
visible - 是否可见,默认True
inside - 模型顶点是否影响模型空间,默认True
opacity - 模型不透明属性,默认不透明
cull - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
fill - 填充,可选项:True, False, None(默认,表示使用当前设置)
slide - 幻灯片函数,默认None
transform - 由旋转、平移和缩放组成的模型几何变换序列
light - 光照模型(默认户外光照模型)
name - 模型或部件名
wxgl.Scheme.xrange
wxgl.Scheme.xrange(range_tuple)
设置x轴范围。
range_tuple - x轴最小值和最大值组成的元祖
wxgl.Scheme.yrange
wxgl.Scheme.yrange(range_tuple)
设置y轴范围。
range_tuple - y轴最小值和最大值组成的元祖
wxgl.Scheme.zrange
wxgl.Scheme.zrange(range_tuple)
设置z轴范围。
range_tuple - z轴最小值和最大值组成的元祖
5.7 wxgl.App
wxgl.App(backend=‘auto’, **kwds)
三维数据快速可视化类,由wxgl.Scheme派生而来。
backend - 后端GUI库,可选wx或qt,默认auto(按照wx/qt优先级自动选择)
kwds - 关键字参数
size - 窗口分辨率,默认(960, 640)
bg - 画布背景色,默认(0.0, 0.0, 0.0)
haxis - 高度轴,默认y轴,可选z轴,不支持x轴
fovy - 相机水平视野角度,默认50°
azim - 方位角,默认0°
elev - 高度角,默认0°
azim_range - 方位角变化范围,默认-180°~180°
elev_range - 高度角变化范围,默认-180°~180°
smooth - 直线和点的反走样,默认True
wxgl.App.save_fig
wxgl.App.save_fig(outfile, dpi=None, fps=25, frames=100, loop=0, quality=100)
保存画布为图像文件或动画文件。
outfile - 输出文件名,支持的文件格式:'.png', '.jpg', '.jpeg', '.gif', '.webp', '.mp4', '.avi', '.wmv', '.mov'
dpi - 图像文件每英寸像素数
fps - 动画文件帧率
frames - 动画文件总帧数
loop - gif文件播放次数,0表示循环播放
quality - webp文件质量,100表示最高品质
wxgl.App.show
wxgl.App.show()
显示画布。
5.8 wxgl.wxscene.WxScene
wxgl.wxscene.WxScene(parent, scheme, **kwds)
场景类,继承自wx.glcanvas.GLCanvas类。
parent - 父级窗口对象
scheme - wxgl.Scheme类实例
kwds - 关键字参数
size - 窗口分辨率,默认(960, 640)
bg - 画布背景色,默认(0.0, 0.0, 0.0)
haxis - 高度轴,默认y轴,可选z轴,不支持x轴
fovy - 相机水平视野角度,默认50°
azim - 方位角,默认0°
elev - 高度角,默认0°
azim_range - 方位角变化范围,默认-180°~180°
elev_range - 高度角变化范围,默认-180°~180°
smooth - 直线和点的反走样,默认True
wxgl.wxscene.WxScene.capture
wxgl.wxscene.WxScene.capture(mode=‘RGBA’, crop=False, buffer=‘front’)
捕捉缓冲区数据,保存到名为im_pil的类属性变量中。
mode - 'RGB'或'RGBA'
crop - 是否将宽高裁切为16的倍数
buffer - 'front'(前缓冲区)或'back'(后缓冲区)
wxgl.wxscene.WxScene.get_buffer
wxgl.wxscene.WxScene.get_buffer(mode=‘RGBA’, crop=False, buffer=‘front’)
以PIL对象的格式返回场景缓冲区数据。
mode - 'RGB'或'RGBA'
crop - 是否将宽高裁切为16的倍数
buffer - 'front'(前缓冲区)或'back'(后缓冲区)
wxgl.wxscene.WxScene.home
wxgl.wxscene.WxScene.home()
恢复初始位置和姿态。
wxgl.wxscene.WxScene.pause
wxgl.wxscene.WxScene.pause()
动画启停。
wxgl.wxscene.WxScene.set_visible
wxgl.wxscene.WxScene.set_visible(name, visible)
设置部件或模型的可见性。
name - 部件名或模型id
visible - bool型
5.9 wxgl.qtscene.QtScene
wxgl.qtscene.QtScene(parent, scheme, **kwds)
场景类,继承自PyQt6.QtOpenGLWidgets.QOpenGLWidget类。
parent - 父级窗口对象
scheme - wxgl.Scheme类实例
kwds - 关键字参数
size - 窗口分辨率,默认(960, 640)
bg - 画布背景色,默认(0.0, 0.0, 0.0)
haxis - 高度轴,默认y轴,可选z轴,不支持x轴
fovy - 相机水平视野角度,默认50°
azim - 方位角,默认0°
elev - 高度角,默认0°
azim_range - 方位角变化范围,默认-180°~180°
elev_range - 高度角变化范围,默认-180°~180°
smooth - 直线和点的反走样,默认True
wxgl.qtscene.QtScene.capture
wxgl.qtscene.QtScene.capture(mode=‘RGBA’, crop=False, buffer=‘front’)
捕捉缓冲区数据,保存到名为im_pil的类属性变量中。
mode - 'RGB'或'RGBA'
crop - 是否将宽高裁切为16的倍数
buffer - 'front'(前缓冲区)或'back'(后缓冲区)
wxgl.qtscene.QtScene.get_buffer
wxgl.qtscene.QtScene.get_buffer(mode=‘RGBA’, crop=False, buffer=‘front’)
以PIL对象的格式返回场景缓冲区数据。
mode - 'RGB'或'RGBA'
crop - 是否将宽高裁切为16的倍数
buffer - 'front'(前缓冲区)或'back'(后缓冲区)
wxgl.qtscene.QtScene.home
wxgl.qtscene.QtScene.home()
恢复初始位置和姿态。
wxgl.qtscene.QtScene.pause
wxgl.qtscene.QtScene.pause()
动画启停。
wxgl.qtscene.QtScene.set_visible
wxgl.qtscene.QtScene.set_visible(name, visible)
设置部件或模型的可见性。
name - 部件名或模型id
visible - bool型
wxgl.qtscene.QtScene.clear_buffer
wxgl.qtscene.QtScene.clear_buffer()
删除纹理、顶点缓冲区等对象。Qt应用程序窗口关闭前,需要在槽函数closeEvent中显式地调用该方法。
name - 部件名或模型id
visible - bool型