|
发表于 2004-4-10 19:13:00
|
显示全部楼层
Re:3D游戏中大型场景分割?
场景(scene)和模型
================
首先,你要明确一个概念,你所生成的那个5M的x文件,是一个场景,而不应该是一个模型。事实上,游戏是以场景为基础的。比如说,你有一个城市,城市里有很多固定建筑。那么你的场景可以这样建立(只不过是简单例子,用于阐明概念):
首先,假设你的地面就是一个平面,那么每个房子有坐标和朝向。
其次,你有很多个模型,每个不同的房子,就是一个模型,假设有100种房子,那么你就有100中模型。(这些模型,每个可以是一个x文件或任何你可以load的文件)
然后,你应该有一个列表来描述这些房子是如何放到你的场景中的。用这100个模型,你可以放无数的房子,比如你有两个体育场,那么,他们共享一个模型,但是他们有两个不同的坐标和朝向(实际上,就是不同的LocalToWorld的矩阵)。
最后,在render的时候(现在不考虑任何高层的culling),你按照你的列表画这些mesh,但是在画之前,你需要分开指定Local2World的Transform矩阵。
场景的组织
================
目前为止,你可以画你的房子,但是fps会很慢,因为你所有的都画了。显然,你需要合理的方法,把看不见的房子,不要画。
一种方法,就是你用view frustrum,和每个房子去做包容判断,如果相交(或者保函)就画,但是如果你的房子很多,你把所有房子遍历一遍也很慢。
于是,就有人引入一些数据结构,如bsp tree, quad-tree, octree等。目的是减少遍历的时间。这就是一个visibility的优化问题。对游戏来说是一个很重要的问题。
|
|