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

news2024/11/14 10:57:51

文章目录

  • 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授权协议的约束为前提。

项目地址

中文文档

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

光照效果

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型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/411085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java--反射

目录 反射 什么是反射? Class类 动态加载 小结 访问字段 获取字段值 设置字段值 练习 小结 调用方法 调用方法 调用静态方法 调用非public方法 多态 练习 小结 调用构造方法 小结 获取继承关系 获取父类的Class 获取interface 继承关系 小…

遗传算法优化深度信念网络DBN的分类预测,GA-DBN分类预测

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) 遗传算法的原理 遗传算法优化深度信念网络DBN的分类识别 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,本文用DBN提取特征,遗传…

如何在DevOps中进行API生命周期管理?

引言 随着DevOps理念在中国企业当中的普及和发展,中国企业DevOps落地成熟度不断提升,根据中国信通院的数据已有近6成企业向全生命周期管理迈进。而在研发全生命周期管理之中,API管理的地位愈发显得重要。随着API数量的大幅增长,也…

Java多线程编程—wait/notify机制

文章目录1. 不使用wait/notify机制通信的缺点2. 什么是wait/notify机制3. wait/notify机制原理4. wait/notify方法的基本用法5. 线程状态的切换6. interrupt()遇到方法wait()7. notify/notifyAll方法8. wait(long)介绍9. 生产者/消费者模式10. 管道机制11. 利用wait/notify实现…

【操作系统】半小时写一个微型操作系统-写一个启动扇区并且导入到软盘镜像中

一.什么是启动扇区 我们使用软盘来启动操作系统时,系统首先就是从软盘的第一个扇区中开始读取数据,也就是第0面,0磁道的第0个扇区,软盘的每个扇区为512个字节的大小,如果最后两个字节为0xaa55(当BIOS看到这…

Java多线程基础面试总结(一)

进程、线程和协程 进程、线程和协程 进程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建、运行到消亡的过程。 在Java中,当我们启动main函数其实就是启动了一个JVM进程&…

【Linux】全新服务器Centos7环境搭建和安装

1、简介 最近服务器重装后,环境啥的则需要从头全部搞一遍,于是开始搞起环境的配置和安装 2、环境配置安装 前期准备 给目录文件加文件传输权限(发现无法上传文件,于是增加权限 $ chmod 766 /home/lj/ 配置DNS服务 #配置DNS服务,如果没有8.8.8.8需要添加 cat /etc/re…

WRF模式与Python融合技术在多领域中的应用及精美绘图教程

当今从事气象及其周边相关领域的人员,常会涉及气象数值模式及其数据处理,无论是作为业务预报的手段、还是作为科研工具,掌握气象数值模式与高效前后处理语言是一件非常重要的技能。WRF作为中尺度气象数值模式的佼佼者,模式功能齐全…

QML控件--Dialog

文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数五、信号一、控件基本信息 Import Statement:import QtQuick.Controls 2.14 Since:Qt 5.8 Inherits:Popup 二、控件使用 Dialog: 是一个弹出窗口,继承…

项目打包发布流程

---》》》项目打包发布 1.编译并构建项目 2.部署 npm i npm run build scp2:需要写代码 ---》》》 后续有空更新:赋几个链接: Jenkins官网 nullhttps://www.jenkins.io/zh/一文详解Jenkins的安装与配置Jenkins是一个基于Java开发的开源…

【SpringMVC】10—其他概念

⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍…

2023年Web3的五大趋势

Web3 这个词有时被称为 "去中心化的互联网",涵盖了一些重要的互联网发展趋势。Web3 的愿景是创造一个不受大公司控制的互联网,如Alibaba、baidu、Google和Facebook,这些公司制定了互联网的大部分规则,掌控着我们今天可以…

HyperWorks2021软件安装教程

下载软件 https://www.xsoftnet.com/share/a0004MWyQAg9r.html产品介绍: HyperWorks一款功能强大的开放式架构仿真软件。拥有先进的技术以及高性能、高效和创新的产品,为用户提供了设计、仿真和制造等服务。支持电磁分析设计、材料建模制造、多物理场分…

学校的地下网站(学校的地下网站1080P高清)

这个问题本身就提得有问题,为什么这么说,这是因为YouTube本身就不是一个视频网站或者说YouTube不是一个传统的视频网站!!! YouTube能够一家独大,可不仅仅是因为有了Google 这个亲爹,还有一点&am…

Flutter Web 开发实践与优化

一,Flutter Web架构 目前,除了可以支持Android、iOS移动跨平台开发之外,Flutter还支持macOS、Windows、Linux和Web等多个跨平台的开发。可以说,作为一款先进的跨平台开发框架,Flutter已经真正意义上实现了“一次编写,处处运行”的美好愿景。 众所周知,Dart 语言存在之…

【建议收藏】数据库 SQL 入门——事务(内附演示)

文章目录📚引言📖事务📑事务的概念📑事务操作🔖查看与设置事务提交方式🔖提交事务与回滚事务📑事务的特性📑并发事务问题📑事务隔离级别📍总结📚引…

8.基于拉丁超立方法的风光场景生成与削减

matlab代码:基于拉丁超立方法的风光场景生成与削减 摘要:与蒙特卡洛法不同,拉丁超立方采样改进了采样策略能够做到较小采样规模中获得较高的采样精度,属于分层抽样技术,设定风光出力遵从正态分布normrnd,从…

字节面试体验值拉满~

今天分享一位读者春招的字节二面面经,岗位是后端开发。 一个编程语言都没问,都是问网络项目mysqlredis。 问题记录 使用消息中间件降低消息持久化的压力是怎么做的,为什么可以降低? 读者答:在突发大量消息的情况下…

水塘抽样解决随机选择问题

1.简介 水塘抽样是一系列的随机算法,其目的在于从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到内存的情况。最常见例子为Jeffrey Vitter在其论文中所提及的算法R。 2.算法步骤&#xff1…

AD823AARZ-RL-ASEMI代理亚德诺AD823AARZ-RL车规级芯片

编辑-Z AD823AARZ-RL芯片参数: 型号:AD823AARZ-RL −3dB带宽:17 MHz 全功率响应:4.8 MHz 斜率:30 V/s 输入电压噪声:14 nV/√Hz 输入电流噪声:1 fA/√Hz 初始偏移量:0.12mV …