- 注册时间
- 2007-6-2
- 最后登录
- 2019-7-6
版主
- 积分
- 806
|
3D场景里种树效率提高方法正确的代码:
Public Tree3D(1) As TVMesh '3D树木
Public TreePOS(100) As D3DVECTOR '3D树木坐标
Set Tree3D(1) = scene.CreateMeshBuilder("Tree3d1")
Tree3D(1).LoadXFile "TREE\TREE4.X", , False '读一次模型
Tree3D(1).ScaleMesh 2.5, 2.5, 2.5 '尺寸
Tree3D(1).SetRotation 0, 0, 0 '角度
For TreeSZ = 1 To 100
TreePOS(TreeSZ).X = Int(Rnd * 3000 + 500)
TreePOS(TreeSZ).Z = Int(Rnd * 500 + 300)
TreePOS(TreeSZ).Y = Land.GetHeight(TreePOS(TreeSZ).X, TreePOS(TreeSZ).Z)
Tree3D(1).SetPosition TreePOS(TreeSZ).X, TreePOS(TreeSZ).Y, TreePOS(TreeSZ).Z
Next TreeSZ
显示的时候:
For TreeSZ = 1 To 100
Tree3D(1).SetPosition TreePOS(TreeSZ).X, TreePOS(TreeSZ).Y, TreePOS(TreeSZ).Z
tree3d(1).render
Next TreeSZ
退出:
Set Tree3D(1) = Nothing
------------------------------------------------------------------------------
错误的代码:
Public Tree3D(100) As TVMesh '3D树木
Public TreePOS(100) As D3DVECTOR '3D树木坐标
For TreeSZ = 1 To 100
Set Tree3D(TreeSZ) = scene.CreateMeshBuilder("Tree3d1")
Tree3D(TreeSZ).LoadXFile "TREE\TREE4.X", , False '读一次模型
Tree3D(TreeSZ).ScaleMesh 2.5, 2.5, 2.5 '尺寸
Tree3D(TreeSZ).SetRotation 0, 0, 0 '角度
TreePOS(TreeSZ).X = Int(Rnd * 3000 + 500)
TreePOS(TreeSZ).Z = Int(Rnd * 500 + 300)
TreePOS(TreeSZ).Y = Land.GetHeight(TreePOS(TreeSZ).X, TreePOS(TreeSZ).Z)
Tree3D(TreeSZ ).SetPosition TreePOS(TreeSZ).X, TreePOS(TreeSZ).Y, TreePOS(TreeSZ).Z
Next TreeSZ
显示的时候:
For TreeSZ = 1 To 100
tree3d(TreeSZ ).render
Next TreeSZ
退出:
For TreeSZ = 1 To 100: Set Tree3D(TreeSZ) = Nothing: Next
-------------------------------------------------------------------------------------
这是种100棵树的代码,两组代码的执行效率差别很大,前者比后者载入、显示速度快5-10倍,树越多速度越明显,因为前组代码只读一次树,后面的代码是错误的,重复读了100次模型,TV3D官方的例子也犯了后者的错误。 |
|