我是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);
Run Code Online (Sandbox Code Playgroud)
让我与整个精灵表所以矩形u和v的glTexCoord2f 具有小于1.0F.
我现在需要的是一个公式,将计算u和v纹理中的任何精灵的ID.
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...
Run Code Online (Sandbox Code Playgroud)
我想要一个u和v任何这些ID.最后一点没有得到很好的解释,所以如果你愿意,我会更好地解释它.
先感谢您!
图像中精灵纹理的位置是16 x 16阵列,因此纹理的位置(如果将第一个计算为0)是:
row = texNo / 16;
col = texNo % 16;
Run Code Online (Sandbox Code Playgroud)
然后坐标是:
u0 = row / 16;
u1 = (row + 1) / 16;
v0 = col / 16;
v1 = (col + 1) / 16;
Run Code Online (Sandbox Code Playgroud)
然后在适当的时候用u1或v1替换1.0f,在glTexCoord2Df调用中用u0或v0替换0.0f.
| 归档时间: |
|
| 查看次数: |
2962 次 |
| 最近记录: |