热烈欢迎新会员,新手报到帖2018, CG++10年了!场景助手3.0下载飞浪脚本零起点入门
返回列表 发帖

请问:动画运行结果与设想的不一样,程序哪里了错了?如何改进?谢谢!

本帖最后由 hbtslc 于 2017-4-26 17:02 编辑

动画设想:球片依次展开,再依次收拢。


--选中所有对象
max select all
--删除选中对象
max delete
Cylinder smooth:on heightsegs:1 capsegs:1 sides:37 height:0.2 radius:30 mapcoords:on pos:[-0.1259,-0.377365,0] isSelected:on slice:on sliceFrom:180
for i=1 to 89 do copy $
select geometry
y=selection as array
clearSelection()
x=0
for i=1 to 180 do animate on
(   
if(i==1)  do x=0
if(i==91) do x=-364
if(i<=90) then
   (at time i  ( rotate y (angleaxis (x+=4) [-1,0,0])))
else
   (at time i  ( rotate y[181-i] (angleaxis (x+=4) [-1,0,0])))  
)
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

  1. --选中所有对象
  2. max select all
  3. --删除选中对象
  4. max delete
  5. obj=Cylinder smooth:on heightsegs:1 capsegs:1 sides:37 height:0.2 radius:30 mapcoords:on pos:[-0.1259,-0.377365,0] isSelected:on slice:on sliceFrom:180
  6. for i=1 to 89 do copy obj
  7. select geometry
  8. y=selection as array
  9. clearSelection()
  10. x=0
  11. for i=0 to 180 by 90 do animate on
  12. (
  13.         if i==90 do
  14.         (
  15.                 for o in y do
  16.                 (
  17.                         at time i  ( rotate o (angleaxis (x+=4) [-1,0,0]))
  18.                 )
  19.         )
  20.         if i == 180 do
  21.         (
  22.                 for o in y do
  23.                 (
  24.                         at time i  ( rotate o (angleaxis (x-=4) [-1,0,0]))
  25.                 )               
  26.         )
  27. )
复制代码

TOP

回复 1# hbtslc


   是不是这个意思?

TOP

谢谢!
运行后,发现没有按原路径返回啊

TOP

  1. --选中所有对象
  2. max select all
  3. --删除选中对象
  4. max delete
  5. obj=Cylinder smooth:on heightsegs:1 capsegs:1 sides:37 height:0.2 radius:30 mapcoords:on pos:[-0.1259,-0.377365,0] isSelected:on slice:on sliceFrom:180
  6. for i=1 to 89 do copy obj
  7. select geometry
  8. y=selection as array
  9. clearSelection()

  10. for i=0 to 180 by 90 do animate on
  11. (
  12.         if i==90 do
  13.         (
  14.                         x=0
  15.                 for o in y do
  16.                 (
  17.                         at time i  ( rotate o (angleaxis (x+=4) [-1,0,0]))
  18.                                                         print x
  19.                 )
  20.         )
  21.         if i == 180 do
  22.         (
  23.                         x=0
  24.                 for o in y do
  25.                 (
  26.                         at time i  ( rotate o (angleaxis (x+=4) [1,0,0]))
  27.                                                         print x
  28.                 )               
  29.         )
  30. )
复制代码
回复 4# hbtslc

TOP

本帖最后由 hbtslc 于 2017-4-26 17:01 编辑

首先,非常感谢!
动画运行结果是对对的。
但仔细读代码,有些代码似乎无法理解。请问:
按代码,i=90时     ,代码at time i  ( rotate o (angleaxis (x+=4) [-1,0,0])) 中 i=90,  一次绕轴[-1,0,0]旋转所有球片,生成第90帧。
i=180  时            代码at time i  ( rotate o (angleaxis (x+=4) [1,0,0])) 中 i=180,  一次绕轴[1,0,0]旋转所有球片,生成第180帧。
中间的动画怎么生成的?为什么1-90帧由球片依次出现,91-180帧沿原路返回。

TOP

90帧  [-1,0,0] x轴是反向旋转 180帧 [1,0,0] x轴是正向旋转 可以理解了吧

TOP

本帖最后由 hbtslc 于 2017-4-26 21:24 编辑

rotate的作用我理解,是语句运行后的效果我理解吃力。
这是我改后的脚本,好理解一些。

  1. --删除侦听器框中所有内容
  2. clearListener()
  3. --选中所有对象
  4. max select all
  5. --删除选中对象
  6. max delete

  7. obj=Cylinder smooth:on heightsegs:1 capsegs:1 sides:37 height:0.2 radius:30 mapcoords:on pos:[-0.1259,-0.377365,0] isSelected:on slice:on sliceFrom:180
  8. for i=1 to 89 do copy obj
  9. select geometry
  10. y=selection as array
  11. clearSelection()

  12. animate on
  13. (
  14.     x=0
  15.     k=0
  16.     for o in y do
  17.    (
  18.        k=k+1
  19.        at time k  ( rotate o (angleaxis (x+=4) [-1,0,0]))
  20.    )  
  21.    x=0
  22.    k=90
  23.    for o in y do
  24.    (
  25.       k=k+1
  26.       at time k  ( rotate o (angleaxis (x+=4) [1,0,0]))
  27.   )
  28. )
复制代码
回复 7# hitman

TOP

效果对就好 k=k+1at time k  就是逐帧动画

TOP

返回列表