_Scene

场景类。 全部展开

只读属性展开

  • + logicNode : _SceneNode

    地形对应的逻辑Node。

  • + terrainNode : _SceneNode

    地形对应的渲染Node。

属性展开

  • + detailFadeTime : uint

    细节物体渐入渐出的时间

    • 示例

       scene.detailFadeTime = 200
  • + detailRange : number

    细节物体的显示范围。

    • 示例

       scene.detailRange = 50
  • + graData : _GraphicsData

    场景的GraphicsData。

  • + lowPriorityLimit : uint

    低优先级的结点数限制。与_RenderDevice的dummyMesh属性一起使用。

    • 示例

       scene.lowPriorityLimit = 5
  • + name : String

    资源逻辑名。

    • 示例

       scene.name = 'water'
  • + pfxPlayer : _ParticlePlayer

    场景的ParticlePlayer。

  • + resname : String

    获得资源文件名。赋值则reload该文件。

    • 示例

       scene.resname = reload('water.sen')
  • + sceneScaling : number

    所有场景结点的缩放值。

    • 示例

       scene.sceneScaling = 1.0
  • + skyBox : _SceneNode

    天空盒。

    • 示例 local node = SceneNode.new() node.mesh = Mesh.new('sowrd.msh') scene.skyBox = node
  • + skyRange : uint

    天空盒裁剪的距离

    • 示例

       scene.skyRange = 20
  • + skyScaling : number

    天空盒的缩放量。默认值为1.0。

    • 示例

       scene.skyScaling = 1.0
  • + terrain :_Terrain

    地形。

  • + transform: _Matrix3D

    场景的矩阵

    • 示例

       scene.transform:mulTranslationRight(10, 0, 0)
  • + usePreCaster : bool

    是否使用预计算的投影体来加速阴影计算。

构造方法展开

  • + function _Scene(filename) : _Scene
    • 示例

       scene = _Scene.new('water.sen')

公共方法展开

  • + function _Scene.acrossGrass(pos : _Vector3, region : number, power : number)

    模拟碰撞后草摆动的动画。

    • 参数
    • pos:圆心
    • region:发生草的碰撞摆动的半径的范围
    • power:碰撞力度
  • + function add(filename : string) : _SceneNode

    为文件名为filename的文件创建mesh对象并作为结点加入场景。

    • 返回
    • 添加的结点值。
    • 示例

       print(scene:add('res'))
  • + function add(mesh : _Mesh[, vm : _Matrix3D]) : _SceneNode

    _Mesh对象作为结点加入场景。

    • 参数
    • mesh为_Mesh对象,vm为结点的matrix。
    • 返回
    • 添加的结点值。
    • 示例

       mesh = _Mesh.new('resource01.msh')
      scene:add(mesh)
  • + function addLight(light : _PointLight)

    将PointLight加入场景产生作用。
    示例

        l = _PointLight.new()
    scene:addLight(l)
  • + function clear()

    清空场景中的所有结点。

    • 示例

       scene:clear()
  • + function del(node : _SceneNode)

    从场景中删除结点

    • 参数
    • node为被删除的结点。
    • 示例

       node = _SceneNode.new()
      scene:del(node)
  • + function delLight(light : _PointLight)

    从场景中移除指定的PointLight。

    • 示例

       scene:delLight(l)
  • + function getNode(index : uint) : _SceneNode

    返回结点。

    • 参数
    • index : 索引值。
    • 返回
    • 结点值。
    • 示例

       local index=2
      print(scene:getNode(index))
  • + function getNodeCount() : uint

    返回结点的个数。

    • 返回
    • 结点个数。
    • 示例

       print(scene:getNodeCount)
  • + function getNodes() : _SceneNode[]

    返回所有结点。

    • 示例

       nodes = scene:getNodes()
      for i, v in ipairs(nodes) do
      print(v)
      end
  • + function getPickedNodes() : _SceneNode[]

    返回pick到的结点。

    • 示例

       nodes = scene:getPickedNodes()
      for i, v in ipairs(nodes) do
      print(v)
      end
  • + function onRender(callback : function)

    设置渲染的回调函数。

    • 参数
    • callback为回调函数。当调用场景的时,会对每个结点调用这个回调函数。回调函数的类型为 function (node : _SceneNode, [...]),参数node为_SceneNode对象。
  • + function onRenderCaster(callback : function)

    设置渲染阴影投射时的回调函数。设置了_RenderMethod的node不会回调。

    • 参数
    • callback为回调函数。当渲染场景阴影的时候,会对每个要投射阴影的结点调用这个回调函数。回调函数的类型为 function (node : _SceneNode, [...]),参数node为_SceneNode对象。
  • + function onUpdate(callback : function)

    设置更新的回调函数。

    • 参数
    • callback为回调函数。当调用场景的时,会对每个结点调用这个回调函数。回调函数的类型为 function (node : _SceneNode, [...]),参数node为_SceneNode对象。
  • + function pick(v1 : _Vector3, v2 : _Vector3[, pickFlag : uint, pickBoundbox : bool]) : {x, y, z, name, node}

    在场景中pick,参数可简化为sen:pick(_rd:buildRay(x, y))。

    • 参数
    • v1 : pick射线的起点。
    • v2 : pick射线的方向。
    • pickFlag : pick的标示位。缺省值为-1,意为pick所有标志为。
    • pickBoundbox : 是否pick包围盒。
    • 返回

    • object有5个属性:x, y, z, name, node。(x, y, z)表示pick到的点坐标。name为pick到的mesh名称,node为pick到的_SceneNode结点对象。

    • 示例

       local result = scene:pick(_rd:buildRay(x, y))
  • + function render([...])

    渲染场景。对场景中的每个结点,调用通过设置的回调函数callback。调用的参数列表为(node : _SceneNode, [...])。

    • 示例

       scene:render()
  • + function save(filename)

    将场景存入文件

    • 示例

       scene:save('f:\fancy')
  • + function update([...])

    更新场景。对场景中的每个结点,调用通过设置的回调函数callback。调用的参数列表为(node : _SceneNode, [...])。

    • 示例

       scene:update()
  • + function waveGrass(pos : _Vector3, dir: _Vector2, region : number, angle : number, power : number, time: number)

    模拟草的冲击波。

    • 参数
    • pos:波的中心
    • dir:朝dir方向放波
    • region:发生草的冲击波的范围
    • angle:发生草冲击波的弧度范围
    • power:力度
    • time:冲击波持续时间

代码示例

    _sys:addPath('res')
    _dofile('cameracontrol.lua')

    sen = _Scene.new('water-scene.sen')
    teapot = _mf:createTeapot()
    teapot.transform:setScaling(10, 10, 10)

    _app:onKeyDown(function(key)
    if key == _System.Key1 then
    sen:add(teapot, _Matrix3D.new():setTranslation(_random(-100, 100), _random(-100, 100), _random(-100, 100)))
    elseif key == _System.Key2 then
    if #sen:getNodes() == 1 then return end
    local i
    repeat i = sen:getNode(_random(1, #sen:getNodes()))
    until not i.terrain
    sen:del(i)
    end
    end)

    noticefont = _Font.new('Arial', 10)
    noticefont.textColor = _Color.Yellow

    _app:onIdle(function(e)
    noticefont:drawText(0, 0, 'Press 1 to add a teapot')
    noticefont:drawText(0, 14, 'Press 2 to delete a teapot')
    sen:render()
    end)

    sen:onRender(function(node)
    if node.terrain then
    node.terrain:draw()
    else
    node.mesh:drawMesh()
    end
    end)
问题反馈(登录才可以发表哦!)