我是OpenGL的新手,目前正在尝试渲染具有四个面(每个面具有不同纹理)的多维数据集。

众所周知,每种面部类型都有单独的纹理会占用大量内存,并使应用程序变慢。

目前,我正在尝试将纹理表用于精灵。我有每个纹理为16x16像素的图形文件,其中256个精灵以正方形(16x16)排列。

我知道

GL11.glTexCoord2f(1.0f, 0.0f);
GL11.glVertex3f(1.0f, 1.0f,  1.0f);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(0.0f, 1.0f, 1.0f);
GL11.glTexCoord2f(0.0f, 1.0f);
GL11.glVertex3f(0.0f, 0.0f, 1.0f);
GL11.glTexCoord2f(1.0f, 1.0f);
GL11.glVertex3f(1.0f, 0.0f, 1.0f);

给了我一个带有整个精灵表的矩形,因此u vglTexCoord2f小于1.0f。

我现在需要的是一个公式,该公式将计算纹理中任何精灵ID的uv

这些ID在纹理位图中的含义如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
17 18 16 20 21 22 23 24...

并且我想为这些ID中的任何一个提供uv。最后一点的解释不是很好,所以如果您愿意,我会更好地解释。

先感谢您!

最佳答案

图像中精灵纹理的位置位于16 x 16阵列中,因此纹理的位置(如果您将第一个纹理计数为0)为:

row = texNo / 16;
col = texNo % 16;

坐标为:
u0 = row / 16;
u1 = (row + 1) / 16;

v0 = col / 16;
v1 = (col + 1) / 16;

然后在glTexCoord2Df调用中将u1或v1替换为1.0f,并将u0或v0替换为0.0f。

08-26 02:45
查看更多