vispy - 在 vispy 中使用 MatrixTransform 更改立方体的维度
问题描述
import numpy as np
from vispy import app, scene
from vispy.visuals import transforms
canvas = scene.SceneCanvas(keys='interactive', show=True)
vb = canvas.central_widget.add_view()
vb.camera = 'turntable'
vb.camera.rect = (-10, -10, 20, 20)
box = scene.visuals.Box(width=1, height=2, depth=3, color=(0, 0, 1, 0.3),
edge_color='green')
vb.add(box)
# Define a scale and translate transformation :
box.transform = transforms.STTransform(translate=(0., 0., 0.),
scale=(1., 1., 1.))
@canvas.events.key_press.connect
def on_key_press(ev):
tr = np.array(box.transform.translate)
sc = np.array(box.transform.scale)
if ev.text in '+':
tr[0] += .1
elif ev.text == '-':
tr[0] -= .1
elif ev.text == '(':
sc[0] += .1
elif ev.text == ')':
sc[0] -= .1
box.transform.translate = tr
box.transform.scale = sc
print('Translate (x, y, z): ', list(tr),
'\nScale (x, y, z): ', list(sc), '\n')
if __name__ == '__main__':
import sys
if sys.flags.interactive != 1:
app.run()
在上面的代码中,如果我添加一个 MatrixTransform,然后旋转立方体然后应用缩放,立方体变成了一个菱形
我想要实现的是在画布中旋转立方体并仅在 X 方向上缩放它,而不会影响其他尺寸
解决方案
我认为我们在 vispy 存储库错误报告中对此进行了介绍。解决方案是在乘法中交换矩阵变换和 st 变换的顺序。如果这仍然是一个问题,您能否在使用矩阵时提供您的代码,我们将继续调试。谢谢。
推荐阅读
- c# - 将泛型类型传递给 Theory
- firebase - 如何在 Firebase 后端存储访问令牌?
- excel - 如何使用EXCEL创建股票价格警报/如何处理自动刷新数据,使用宏的动态数据
- css - 单击更改字体颜色
- sql - oracle sql将时间戳转换为日期
- python-3.x - 从 csv 的 url 中删除第一个和最后一个字符时遇到问题
- javascript - 反应:TypeError:调度不是一个函数
- .net - Outlook 插件使用的 TLS 版本
- javascript - 如何在分配优先级时映射字符串数组
- reactjs - React TypeError:无法读取未定义的属性“地图”