C++博客 :: 首页 :: 联系 ::  :: 管理
  163 Posts :: 4 Stories :: 350 Comments :: 0 Trackbacks

常用链接

留言簿(48)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 370840
  • 排名 - 52

最新评论

阅读排行榜

评论排行榜

    在大规模的三维场景中,不可能一次渲染所有的三角形,而且即使能做到这点,全部渲染也是不可取的。常用的做法就是采用LOD,即层次细节模型。距离视点较远的三角形可以大一些,粗糙一些,而距离视点较近的三角形则应有较为细腻地表现。常用的LOD地形的实现算法是四叉树算法,即对二维地平面进行分割时,每次把正方形分成4个等分的小正方形,直到分割的正方形尺寸达到某个阈值为止,然后对不能再分的正方形进行三角形剖分渲染。


由于正方形的右下角位于视截体内部(图1),需要把正方形进行分割,图2为第一次分割的后的状态。由于右下角正方形位于视截体内部,所以进行第二次分割,见图3。直到第3次分割(图4),才有小正方形不在视截体内,既不要细致渲染的正方形。如此不断分割,地平面会出现若干大小不等的正方形。为了记录正方形哪些是要分割的,哪些是不要分割的,需要设置一个标志,为此封装一个类来管理标志,该类记为Bit。

 


    为了判断一个节点区域是否在视截体内部,应该有一个管理视截体数据的类CFrustum。该类应该有视截体的六个平面方程,以及检测物体是否落在视截体内的函数。由于LOD地形是和视点相关的,距离视点进的三角形需要细腻渲染,而较远的则则可以稍微粗糙一些。因此一个正方形距离视点的距离d和自身的边长e应该是一个指标来决定改正方形是否需要细分,d/e < C1时,需要进一步细分,否则不需要进一步细分。当C1的值越大,e的值越小,节点细节较为细致;相反,C1越小,e值越大,节点细节与粗糙。正方形是否需要进一步分割,还和地形的起伏有关系,当地势平坦时,节点细节可以较少,反之节点细节应该较为丰富。r=MAX(正方形四个定点和中心)-MIN(正方形四个定点和中心)。r/e  < C2时,e较大,需要分割。C2越大,e越小,层次越细腻,反之,C2越小,e越大,可以少一些细节。称C1为距离分辨率,  C2为高度分辨率。

既然LOD和视点相关,就必须有一个类来记录视点,把该类记为Camera,该类应该包含视点相关数据,如视点位置,视线目标,视点如何移动,旋转等(未完待续)。









posted on 2008-01-13 19:45 sdfasdf 阅读(7411) 评论(2)  编辑 收藏 引用 所属分类: OPENGL

Feedback

# re: LOD地形设计(一) 2008-01-14 11:21 Fox
3d地形,一般8叉树多些,关注一下。。。。。  回复  更多评论
  

# re: LOD地形设计(一) 2008-01-14 21:17 秦歌
八叉树多用于空间分割,好像LOD用四叉树的多些!  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理