Tcl 在VTK中制作旋转和变换对象

Tcl 在VTK中制作旋转和变换对象,tcl,transform,scale,vtk,Tcl,Transform,Scale,Vtk,我试图制作一个旋转立方体,它改变它的比例(在每个轴上)直到180度,然后慢慢地缩小 到目前为止,我得到了这个: package require vtk package require vtkinteraction set xLength 2 set yLength 2 set zLength 2 vtkCubeSource cube cube SetXLength $xLength cube SetYLength $yLength cube SetZLength $z

我试图制作一个旋转立方体,它改变它的比例(在每个轴上)直到180度,然后慢慢地缩小

到目前为止,我得到了这个:

package require vtk
package require vtkinteraction

set xLength 2
set yLength 2
set zLength 2

vtkCubeSource cube
    cube SetXLength $xLength
    cube SetYLength $yLength
    cube SetZLength $zLength
    cube SetCenter 2 2 2

vtkPolyDataMapper cubeMapper
    cubeMapper SetInput [cube GetOutput]

vtkActor cubeActor
    cubeActor SetMapper cubeMapper
    [cubeActor GetProperty] SetColor 1 0.45 0
    [cubeActor GetProperty] SetDiffuse 0.9
    [cubeActor GetProperty] SetSpecular 0.45
    [cubeActor GetProperty] SetSpecularPower 20

vtkRenderer ren
vtkRenderWindow renWin 
    renWin AddRenderer ren

vtkRenderWindowInteractor iren
    iren SetRenderWindow renWin
    iren AddObserver UserEvent {wm deiconify .vtkInteract}
    iren Initialize

wm withdraw .

ren AddActor cubeActor
ren SetBackground 0.7 0.7 0.7
renWin SetSize 900 900

for {set i 0} {$i < 360} {incr i} {

    if {[expr $i % 2] == 0} {
        set xLength 3
        set yLength 3
        set zLength 3
    } else {
        set xLength 1
        set yLength 1
        set zLength 1
    }

    renWin Render
    [ren GetActiveCamera] Azimuth 1

}

vtkCommand DeleteAllObjects
软件包需要vtk
包需要vtkinteraction
设置X长度2
设置长度为2
设置长度2
vtkCubeSource多维数据集
立方体设置x长度$x长度
多维数据集长度$yLength
立方体设置长度$zLength
立方体集中心2
vtkPolyDataMapper立方映射器
cubeMapper SetInput[多维数据集GetOutput]
电压互感器立方电容器
cubeActor集合映射器cubeMapper
[cubeActor GetProperty]SetColor 1 0.45 0
[cubeActor GetProperty]设置漫反射0.9
[cubeActor GetProperty]设置特殊值0.45
[cubeActor GetProperty]设置特殊功率20
任克伦
伦温
伦温·阿德伦
VTKrender窗口交互器iren
艾琳·塞特伦德温多·伦温
iren AddObserver用户事件{wm deiconify.vtkInteract}
iren初始化
我退出。
加法器立方电容器
任正非退步0.70.70.7
renWin设置尺寸900
对于{set i 0}{$i<360}{incr i}{
如果{[expr$i%2]==0}{
设置X长度为3
设置长度为3
设置长度为3
}否则{
设置X长度为1
设置长度为1
设置长度为1
}
伦文渲染
[ren GetActiveCamera]方位角1
}
vtkCommand DeleteAllObjects

我真的不知道如何正确地使它沿着比例平滑过渡,并在每个循环迭代中渲染这些变化。有什么想法吗?谢谢

您最可能遇到的问题是代码太快。当你画出一帧的时候,你已经在推进下一帧了。慢点(如果使用纯Tk设置2D图形的动画,这将是一个同样大的问题。)

您希望在每个步骤之间运行一点事件循环。可能是这样的(您可能需要调整
2
,而
的“yes”
只是一些无关紧要的任意值;重要的是您正在设置
GoOn
变量,导致
vwait
停止为事件循环提供服务):

把它放在这几行后面:

renWin Render
[ren GetActiveCamera] Azimuth 1
现在,您已经为用户实际感知动画留出了一点时间,您应该有更容易看到的平滑动画。你不需要一秒钟处理那么多帧,大脑就能判断动作是否平稳:电影是24帧,电视是30帧(美国)还是25帧(欧洲)

renWin Render
[ren GetActiveCamera] Azimuth 1