纹理映射的奇怪问题

时间:2011-09-28 19:07:34

标签: java opengl lwjgl

我试图使用LWJGL的slick-util扩展,在加载到Java的四边形世界中使用预先生成的PNG文件中的纹理坐标。

纹理文件为192x96像素,格式正确。它由6x3 32x32磁贴组成。

3d四边形宽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。

2 个答案:

答案 0 :(得分:4)

纹理大小通常是2的幂。我怀疑将192x96纹理的大小调整为256x128或256x256纹理。这并没有真正解释你找到的值但是......但是,我认为,如果你将纹理大小调整为256x256(增加大小,不要缩放!)并根据它计算纹理坐标,你的问题就会出现程。

答案 1 :(得分:0)

我不了解java,但是在目标C和openGL ES中使用我的图像地图集时,您需要使纹理比从图集中选择它们时所指的纹理小。

您是否在纹理图像之间留下了足够的空隙以防止出血?