2014-10-12 1 views
0

저는 180도까지 축척을 변경 한 다음 천천히 저울로 회전하는 회전 큐브를 만들려고합니다. VTK에서 회전하고 변형하는 개체 만들기

지금까지, 나는이있어 :

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 

정말 규모에 따라 원활한 전환을하고 그 변화를 매 사이클마다 반복을 렌더링 제대로 만드는 방법을 알고하지 않습니다. 어떤 아이디어? 감사합니다.

답변

0

문제는 귀하의 코드가 너무 빠름을 나타냅니다. 한 프레임을 그릴 때까지 이미 다음 프레임을 진행하고 있습니다. 천천히 해! (일반 Tk로 2D 그래픽을 애니메이션으로 만들면 큰 문제가 될 수 있습니다.)

각 단계마다 약간의 이벤트 루프를 실행하고 싶습니다. 아마도 이와 같이 (2을 조정해야 할 수도 있고 "yes"은 중요하지 않은 임의의 값일 수 있으며 GoOn 변수를 설정하면 이 이벤트 루프 서비스를 중단하게됩니다.

바로이 선 후
after 2 set GoOn "yes" 
vwait GoOn 

넣어 : 이제

renWin Render 
[ren GetActiveCamera] Azimuth 1 

당신이 애니메이션은 실제로 사용자가 인식되기 위해서는 약간의 시간을 준 것을, 당신은 볼 훨씬 쉽게 뭔가를한다고 부드럽게. 을 처리 할 필요가 없습니다. 두 번째 뇌는 움직임이 부드럽다 고 생각할 수 있습니다. 영화는 24 개, 미국은 30 개, 유럽은 25 개입니다.