1、ambientlight
_rd:uselight(light)
将light压入渲染设备的光栈。渲染设备会使用光栈中的所有元素来渲染。每个useLight应该对应一个popLight。多次压入颜色会呈现混合后的颜色。例如:绿+红=黄
1 _dofile('cameracontrol.lua') 2 teapot = _mf:createTeapot() 3 _rd.camera.eye = _Vector3.new(30, 30, 30) 4 5 ambient = _AmbientLight.new() 6 ambient.color = _Color.Green 7 _rd:useLight(ambient) 8 9 specular = _SpecularLight.new() 10 specular.color = _Color.Red 11 _rd:useLight(specular) 12 13 _app:onIdle(function(e) 14 _rd:drawAxis(30) 15 teapot:drawMesh() 16 end)
2、analyze-scene
_debug:objectMonitor(类名,number)
会对一个类进行监视,出现一个二维坐标系
t = _Timer.new()
t:start(t, duration, callback)
在duration时间内,执行完函数callback,并循环。
3、animation
_sys:addDownloader('local://dlsrc', 3000) 下载一个文件夹dlsrc
_sys:delFile('文件名')
_sys:copyFile('源文件', '目标文件') 貌似没有目标文件会自动生成
例:_sys:copyFile('res/act01.san', 'dlsrc/test.san')
PS:先建立骨骼文件,然后为骨骼添加动画,并渲染骨骼
1 _sys:addPath('res') 2 --_sys:addPath('dlsrc') 3 _dofile('cameracontrol.lua') 4 5 6 _sys:addDownloader('local://dlsrc',3000) 7 _sys.asyncLoad = true 8 9 if _sys:delFile('test.san') then 10 print("1~~!") 11 end 12 _sys:copyFile('res/atc01.san', 'dlsrc/test.san') 13 _sys:copyFile('res/atc01.san', 'test.san') 14 _Animation.new('test.san') 15 _gc() 16 if _sys:delFile('test.san') then 17 print("2~~!") 18 end 19 20 skl = _Skeleton.new('girl.skl') 21 san = skl:addAnima('test.san') 22 san.speed = 2 23 san.loop = true 24 san:play() 25 26 _app:onIdle(function(elapse) 27 skl:drawSkeleton() 28 _rd:drawAxis(50) 29 end) 30 31 _sys:delFile('test.san')
4、animation-combine
为骨骼文件添加一些动画,然后合并这些动画,最后play()
PS:如果不用动画san:play()这个方法,光渲染骨骼是不会有图形的。
san1:combine(san0)
san1:combine(san2)
san1:play()
播放顺序是san1-san0-san2
1 _sys:addPath('res') 2 _dofile('cameracontrol.lua') 3 4 skl = _Skeleton.new('girl.skl') 5 6 san0 = skl:addAnima('idle.san') 7 san1 = skl:addAnima('san1.san') 8 san2 = skl:addAnima('san2.san') 9 10 print( san0.duration ) -- 输出动画的总持续时间 11 print( san1.duration ) 12 print( san2.duration ) 13 14 san1:combine(san0) 15 san1:combine(san2) 16 san1:play() 17 print( san1.duration ) 18 19 _app:onIdle(function(e) 20 skl:drawSkeleton() 21 end)
5、animation-holder
按1删除动画,按2交换两个动画对应的骨骼
addAnima('_Animation对象或者ska资源文件名')
那么就有两种方式来给骨骼加动画,一种new一个_Animation,然后初始化loop,play()等,最后skl:addAnima(san);另一种就是直接san = skl:addAnima('san1.san')
_Animation有一个属性 holder,可以更改持有该动画的骨骼。例如:san1.holder = skl2就把原来san1对应的骨骼skl1改成了skl2
PS:想删除一个动画直接赋值为nil就可以。
1 _sys:addPath('res') 2 _dofile('cameracontrol.lua') 3 4 skl1 = _Skeleton.new('girl.skl') 5 skl2 = _Skeleton.new('girl.skl') 6 7 san1 = skl1:addAnima('idle.san') 8 san1.loop = true 9 san1:play() 10 11 12 -- san2 = _Animation.new('san1.san') 13 san2 = skl2:addAnima('san1.san') 14 san2.loop = true 15 san2:play() 16 -- skl2:addAnima(san2) 17 18 mat1 = _Matrix3D.new():setTranslation(0, 30, 0) 19 mat2 = _Matrix3D.new():setTranslation(0, -30, 0) 20 21 _app:onKeyDown(function(u) 22 if u == _System.Key1 then 23 skl1:delAnima(san1) 24 skl2:delAnima(san2) 25 san1 = nil 26 san2 = nil 27 elseif u == _System.Key2 then 28 if san1.holder == skl1 then 29 san1.holder = skl2 30 san2.holder = skl1 31 else 32 san1.holder = skl1 33 san2.holder = skl2 34 end 35 end 36 37 local c1 = _debug:objectCount(_Animation.typeid) 38 _gc() 39 local c2 = _debug:objectCount(_Animation.typeid) 40 print('Animation : ' .. c1 .. ' -> ' .. c2 ) 41 end) 42 43 _app:onIdle(function(e) 44 _rd:drawAxis(50) 45 _rd:pushMatrix3D(mat1) 46 skl1:drawSkeleton() 47 _rd:popMatrix3D() 48 49 _rd:pushMatrix3D(mat2) 50 skl2:drawSkeleton() 51 _rd:popMatrix3D() 52 end) -- holder 属性 是什么 返回_GraphicsEvent