幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2510|回复: 0

3D场景里种树效率提高方法正确的代码

[复制链接]

42

主题

70

帖子

806

积分

版主

Rank: 7Rank: 7Rank: 7

积分
806
发表于 2009-2-26 15:39:31 | 显示全部楼层 |阅读模式
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官方的例子也犯了后者的错误。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-24 03:12 , Processed in 0.015679 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表