十分钟玩转3D绘图:WxGL完全手册

文章目录

1 简介

WxGL是一个基于PyOpenGL的跨平台三维数据快速可视化工具包,提供类似Matplotlib风格的应用方式。WxGL也可以集成到wxPython或PyQt6中实现更多的功能和控制。

WxGL提供了一套简洁易用、对用户友好的API,将OpenGL的复杂概念封装起来,使得用户可以更加专注于数据的处理,而无需在3D显示方面耗费精力。WxGL还提供了着色器语言接口,允许用户定制着色器,以应对特殊的应用需求。

作为开源项目,WxGL遵循MIT开源软件许可协议。使用、复制、修改本软件以及出版发行、再授权、贩售本软件,须以接受MIT授权协议的约束为前提。

项目地址

中文文档

在这里插入图片描述

WxGL

在这里插入图片描述

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()

Colorbar

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()

光照效果

光照模式配合漫反射系数、镜面反射系数、高光系数、透光系数等参数,可模拟出不同的材质。这几个参数的默认值和值域范围请参考本文档的API部分。下面的代码绘制了塑料质感的分子3D模型。

import wxgl

c1, c2, c3, c4, c5 = '#d8d8d8', '#00d0d0', '#6060f0', '#903030', '#90C090'
light = wxgl.SunLight(direction=(0.5,-0.5,-1.0), diffuse=0.7, specular=0.98, shiny=100, pellucid=0.9)

app = wxgl.App(bg='#f0f0f0', azim=-30, elev=20, fovy=40)

app.sphere((-2,0,0), 0.35, color=c1, light=light)
app.sphere((0,0,0), 0.35, color=c1, light=light)
app.sphere((2,0,0), 0.35, color=c1, light=light)
app.sphere((-1,-1,0), 0.35, color=c1, light=light)
app.sphere((1,-1,0), 0.35, color=c1, light=light)

app.cylinder((-2,0,0), (-1,-1,0), 0.17, color=c2, light=light)
app.cylinder((0,0,0), (-1,-1,0), 0.17, color=c2, light=light)
app.cylinder((0,0,0), (1,-1,0), 0.17, color=c2, light=light)
app.cylinder((2,0,0), (1,-1,0), 0.17, color=c2, light=light)

app.sphere((-2,1.2,-0.6), 0.35, color=c3, light=light)
app.sphere((-3,-0.6,0.6), 0.35, color=c3, light=light)
app.sphere((2.6,0.5,1), 0.35, color=c3, light=light)
app.sphere((2.6,0.5,-1), 0.35, color=c3, light=light)
app.sphere((1,-1.5,1), 0.35, color=c5, light=light)

app.cylinder((-2,0,0), (-2,1.2,-0.6), 0.17, color=c4, light=light)
app.cylinder((-2,0,0), (-3,-0.6,0.6), 0.17, color=c2, light=light)
app.cylinder((2,0,0), (2.6,0.5,1), 0.17, color=c4, light=light)
app.cylinder((2,0,0), (2.6,0.5,-1), 0.17, color=c2, light=light)
app.cylinder((1,-1,0), (1,-1.5,1), 0.17, color=c2, light=light)

app.sphere((0,0.7,-0.8), 0.15, color=c2, light=light)
app.sphere((0,0.7,0.8), 0.15, color=c2, light=light)
app.sphere((-1,-1.7,-0.8), 0.15, color=c2, light=light)
app.sphere((-1,-1.7,0.8), 0.15, color=c2, light=light)

app.cylinder((0,0,0), (0,0.7,-0.8), 0.08, color=c2, light=light)
app.cylinder((0,0,0), (0,0.7,0.8), 0.08, color=c2, light=light)
app.cylinder((-1,-1,0), (-1,-1.7,-0.8), 0.08, color=c2, light=light)
app.cylinder((-1,-1,0), (-1,-1.7,0.8), 0.08, color=c2, light=light)

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 绘制点云

只需要一个点云数据文件名(支持.ply和.pcd格式),即可绘制点云模型。此外,WxGL还提供了读取点云数据文件的函数wxgl.read_pcfile,返回一个PointCloudData类实例。

import wxgl

app = wxgl.App(haxis='z')
app.pointcloud('res/pointcloud/3.pcd')
app.show()

在这里插入图片描述

3.8 生成动画或视频文件

除了显示画布的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)

wxgl.read_pcfile

wxgl.read_pcfile(pcfile)

读取.ply和.pcd格式的点云文件,返回一个PointCloudData类实例,该实例有以下属性:

  • PointCloudData.ok - 数据是否可用,布尔型
  • PointCloudData.info - 数据可用性说明,字符串
  • PointCloudData.raw - 解读出来的原始数据,字典
  • PointCloudData.fields - 数据字段(项)名称,列表
  • PointCloudData.xyz - 点的坐标数据,None或者numpy数组(ndarray)
  • PointCloudData.rgb - 点的颜色数据,None或者numpy数组(ndarray)
  • PointCloudData.intensity - 点的强度数据,None或者numpy数组(ndarray)

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.colorbar(data, cm=‘viridis’, ff=str, endpoint=True)

绘制调色板。

data        - 值域范围或刻度序列:长度大于1的元组或列表
cm          - 调色板名称
kwds        - 关键字参数
ff          - 刻度标注格式化函数
endpoint    - 刻度是否包含值域范围的两个端点值

wxgl.Scheme.cone

wxgl.Scheme.cone(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.pipe

wxgl.Scheme.pipe(vs, r, **kwds)

绘制圆管。

vs          - 圆管中心线顶点集:元组、列表或numpy数组,shape=(n,3)
r           - 圆管半径:浮点型
kwds        - 关键字参数
    color       - 颜色:浮点型元组、列表或numpy数组
    data        - 数据集:元组、列表或numpy数组,shape=(n,)
    cm          - 调色板
    cell        - 圆周分片精度:默认5°
    visible     - 是否可见,默认True
    inside      - 模型顶点是否影响模型空间,默认True
    opacity     - 模型不透明属性,默认不透明
    cull        - 面剔除,可选项:'front', 'back', None(默认,表示使用当前设置)
    fill        - 填充,可选项:True, False, None(默认,表示使用当前设置) 
    slide       - 幻灯片函数,默认None
    transform   - 由旋转、平移和缩放组成的模型几何变换序列
    light       - 光照模型(默认户外光照模型)
    name        - 模型或部件名

wxgl.Scheme.pointcloud

wxgl.Scheme.pointcloud(pcfile, cm=‘viridis’, size=1)

读点云文件并绘制模型。

pcfile      - 点云文件,支持ply、pcd等格式
cm          - 调色板。若文件无颜色数据但包含强度数据,则使用调色板将强度映射为颜色
size        - 点的大小

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.info

wxgl.App.info(time_func=None, cam_func=None)

设置时间信息格式化函数和相机位置信息格式化函数,开启在界面状态栏显示信息功能。

time_func   - 以时间t(毫秒)为参数的时间信息格式化函数,返回字符串
cam_func    - 以方位角、仰角和距离为参数的相机位置信息格式化函数,返回字符串

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中显式地调用该方法。

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天元浪子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值