OpenGL 3D纹理和四边形的一部分上的映射

OpenGL 3D textures and mapping on part of a quad

我正在制作一个类似于Minecraft的地形引擎,以学习一些OpenGL和3D,除了我不满意的FPS之外,其他一切都正常。

About

当前:我目前仅绘制可见的面孔并使用视锥剔除,这些多维数据集以16×16×32的多维数据集块为单位(目前)。

我每个块使用6个显示列表,每侧一个(左,右,前,后,上,下)一个显示列表,因此立方体不是一一绘制的,而是一次绘制整个块的一面。

使用这种方法,我得到大约20-100fps的帧,这不是很好。剖析显示,我向图形卡发送了大约100k顶点,并且当我仰望天空且顶点降到10k以下时,我的速度高达200 fps,所以我认为这是我的瓶颈。

我想做的事情:因为少即是多,所以我继续进行以下操作:http://ogre3d.org/forums/viewtopic.php?f=2


这是您问题的答案。首先,他将场景视为256 x 256 x 256的多维数据集。对于每个轴,他在每个轴值(即从0,0,0到0,256,256,然后从1,0,0到1,256,256,依此类推,直至256,0,0到256,256,256)。然后,他朝着另一个方向执行相同的操作-使用相反的法线-每个轴总共提供512个正方形/ 1024个三角形。对y和z重复该过程,以得到总共3072个三角形和3072个顶点(顶点仅沿256 x 256 x 256立方体的边缘出现)。

现在纹理化。实际上,他正在绘制每个立方体,但是通过使该位置的纹理透明来使某些立方体不可见。他有两种纹理,分别是256 x 256 x 256 3D纹理和由较小纹理组成的16 x 16纹理图集。要绘制纹理,首先他将绘制的多维数据集的坐标用作3D纹理中的纹理坐标。因此,如果他在例如42、7、13、3D纹理坐标分别是42、7、13。在3D纹理内部,他存储的都是绿色和蓝色值,它们对应于要绘制的纹理图集中的子纹理的u,v坐标。因此,在他的示例中,3D纹理中的颜色为R = 0(未使用),G = 2,B = 4,A = 0(未使用)。他使用2


n