0
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 方向上缩放它,而不会影响其他尺寸

4

1 回答 1

0

我认为我们在 vispy 存储库错误报告中对此进行了介绍。解决方案是在乘法中交换矩阵变换和 st 变换的顺序。如果这仍然是一个问题,您能否在使用矩阵时提供您的代码,我们将继续调试。谢谢。

于 2020-09-30T14:20:59.407 回答