2011-09-28 292 views
3

我试图使用LWJGL的slick-util扩展加载到Java的四维四维世界上预先生成的PNG文件中的纹理坐标。纹理映射的奇怪问题

纹理文件是192x96像素,并且格式正确。它由6x3 32x32的瓷砖组成。

三维四边形宽1.5f宽。他们正确分开。

我有问题得到正确的纹理坐标。当我把0.0f到0.333333f作为y坐标时,我得到的显示比顶部瓷砖的高度略高。然而,如果我把0.0f-0.25f,我得到正好1/3的高度,这是我的瓷砖的高度。我还没有找到X坐标的幻数,但也许有人可以向我解释为什么根据纹理坐标,96的1/4是24,还是我做错了什么?我怀疑它可能是我的四倍大小和纹理之间的冲突。

Screenshot http://i52.tinypic.com/2qbafqp.jpg

立方体的顶部使用纹理坐标(0.0,0.0F),(0.0,0.333333f),(0.166666f,0.333333f),(0.166666f,0.0F),其应用从左上角逆时针移动到右上角。再一次,主要的纹理文件是32x32的瓷砖排列成192x96(96是高度)。

注意我在其中一块瓷砖的顶部放置了一条白线,以查看其边框,黑色线条位于其底部,然后是白色线条位于其下方的顶部。纹理'流血'太远了。正如你所看到的,其他纹理有他们自己甚至陌生的坐标。

安排纹理坐标,假设图像的顶部是1.0而不是底部,会产生奇怪的正方形,并在四边形的中心应该有一个矩形孔。

我正在使用TEX_ENV GL_MODULATE。

回答

4

纹理大小通常是2的幂。我怀疑是将192x96纹理调整为256x128或256x256纹理。但是,我认为,如果将纹理大小调整为256x256(增加大小,请不要缩放!),并基于此计算纹理坐标,则问题将消失远。

+0

这是正确的,谢谢。 – Sean

0

我不知道Java,但在目标C和OpenGL ES中使用我的图像地图集时,需要使纹理小于从地图集中选择它们时所指的纹理。

您是否在纹理图像之间留有足够的空隙以防止“流血?

+0

没有差距,它都是坚实的。然而,我怀疑这是问题,因为坐标在0.25f处完美工作。 开始怀疑四边形尺寸是否伸展纹理坐标,因为1.5x0.25非常接近0.33,这是正确的。现在检查。 – Sean