【发布时间】:2011-01-27 22:15:01
【问题描述】:
我正在制作一个Minecraft-ish 地形引擎来学习一些 OpenGL 和 3D,除了我不满意的 FPS 之外,一切都很好。
当前:我目前只绘制可见面并使用平截头体剔除,立方体为 16 x 16 x 32 立方体块(目前)。
我每个块使用 6 个显示列表,每边一个(左、右、前、后、上、下),所以立方体不是一个一个地绘制,而是整个块的一面。
使用这种方法,我可以得到大约 20-100fps,这不是很好。分析说我向显卡发送了大约 100k 个顶点,当我看到天空并且顶点低于 10k 时,我的速度高达 200+fps,所以我想这是我的瓶颈。
我想做的事:因为少即是多,所以我继续前进并找到了这个:http://ogre3d.org/forums/viewtopic.php?f=2&t=60381&p=405688#p404631
据我了解,Kojack 使用巨大平面的 3D 网格,并以某种方式将 2D 纹理图集中的纹理绘制到这些巨大平面的某些位置。他说他使用 256x256x256 的 3D 纹理和绿色和蓝色通道来映射到 2D 纹理图集。
他的方法总计平面的顶点数是恒定的,如果应用我的地图,有时是无用的,但仍然比我现在拥有的少。
我的问题:他说的我没听懂:(,我想试试他的方法,但是我不明白他到底做了什么,主要是我觉得是我经验不足使用 3D 纹理(我想象的是一块像素)。他是如何将纹理从纹理图集映射到平面的一部分的,而这通过使用一些 3D 纹理贴图...
谁能解释一下 Kojack 做了什么,或者给我指出一些有用的地方,即使是谷歌现在也没有任何帮助。
【问题讨论】:
-
我不知道着色器是什么,所以我想我没有使用它们,但我广泛使用 glVertex3f,所以我猜是固定功能。
-
硬件:P4 3GHz 与 ATI Radeon X1600。 Minecraft 至少以 200FPS 的速度运行。
-
是的,如果您不使用着色器,Kojack 的方法将不适用。
-
使用 2 个三角形,我得到大约 650fps = 1.5ms/帧。我还测试了 8 个(总是每个三角形的所有顶点都在屏幕上),相同的数字,所以对于少量的三角形(带纹理)大约需要 1.5 毫秒。
-
从您的屏幕截图来看,我认为您正在为每个立方体侧面显示列表进行单个纹理绑定?总共约 6 个?