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

这篇具有很好参考价值的文章主要介绍了十分钟玩转3D绘图:WxGL完全手册。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 简介

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

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

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

项目地址

中文文档

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,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()

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

光照模式配合漫反射系数、镜面反射系数、高光系数、透光系数等参数,可模拟出不同的材质。这几个参数的默认值和值域范围请参考本文档的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()

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

3.7 绘制点云

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

import wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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

wxgl-0.8.5-py37,OpenGL学习笔记,python论道,3d,python,wxgl

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中显式地调用该方法。文章来源地址https://www.toymoban.com/news/detail-815522.html

到了这里,关于十分钟玩转3D绘图:WxGL完全手册的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django入门,十分钟学会登录网页

    我们假定你已经阅读了 安装 Django。你能知道 Django 已被安装,且安装的是哪个版本,通过在命令提示行输入命令 cmd黑窗口运行,不懂cmd百度一下 如果这是你第一次使用 Django 的话,你需要一些初始化设置。也就是说,你需要用一些自动生成的代码配置一个 Django project ——

    2024年01月24日
    浏览(62)
  • 十分钟理解回归测试(Regression Testing)

    回归测试是一个系统的质量控制过程,用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响(比如你在家中安装了新的空调系统,发现虽然新的空调系统可以按预期工作,但是本来亮的等却不亮了)。其主要目标是确保旨在改进的修

    2024年02月05日
    浏览(76)
  • 十分钟python入门 正则表达式

    正则常见的三种功能,它们分别是:校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操作。 所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符 元字符大致分成这几类:表示单个特殊字符的,表示空白符的,表示某个范围的,表示次数的量

    2024年02月13日
    浏览(53)
  • 十分钟掌握 Vim 编辑器核心功能

    👉相信不论是前端还是后台多多少少都需要上到服务器上做一些操作,改改配置文件等,大多数 Linux 服务器默认都安装了 Vim 文本编辑器,因此如果还不会 Vim 的话,可能会被同事“耻笑”。 👉如果本文对你有所帮助,请点个👍 吧。 Vim是什么? Vim 是从 vi 发展出来的一个

    2024年02月16日
    浏览(57)
  • 十分钟读懂Stable Diffusion运行原理

    AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好奇其背后技术。本文整理了一些学习过程中记录的

    2024年02月09日
    浏览(64)
  • 十分钟实现 Android Camera2 相机预览

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 Camera2 API 的包名是 android.hardware.camera2 ,是 Android 5.0 后推出的一套调用摄像头设备的接口

    2024年02月13日
    浏览(70)
  • 十分钟实现 Android Camera2 视频录制

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 上两篇文章使用 Camera2 实现了相机预览和拍照的功能,这篇文章我们接着上文,来实现

    2024年02月11日
    浏览(48)
  • 十分钟实现 Android Camera2 相机拍照

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 上篇文章 我们使用 Camera2 实现了相机预览的功能,这篇文章我们接着上文,来实现 Cam

    2024年02月11日
    浏览(63)
  • 十分钟,带你了解 Vue3 的新写法

    本文的目的,是为了让已经有 Vue2 开发经验的 人 ,快速掌握 Vue3 的写法。 因此, 本篇假定你已经掌握 Vue 的核心内容 ,只为你介绍编写 Vue3 代码,需要了解的内容。 首先,Vue3 新增了一个叫做组合式 api 的东西,英文名叫 Composition API。因此 Vue3 的  script  现在支持三种写法

    2024年02月05日
    浏览(51)
  • 十分钟带汝入门大数据开发语言Scala

    大家好,我是百思不得小赵。 创作时间:2022 年 6 月 7 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀 今天是加入CSDN的第1193天。觉得有帮助麻烦👏点赞、🍀评论、❤️收藏 Scala是一门多范式的编程语言,一种类似Ja

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包