2

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

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

3d 四边形是 1.5f 宽和长。它们被适当地隔开。

我在获取正确的纹理坐标时遇到问题。当我将 0.0f 到 0.333333f 作为 y 坐标时,我得到的结果略高于显示的顶部图块的高度。但是,如果我输入 0.0f-0.25f,我得到的正好是 1/3,这是我的瓷砖的高度。我还没有找到 X 坐标的幻数,但也许有人可以向我解释为什么根据纹理坐标,96 的 1/4 是 24,或者我做错了什么?我怀疑这可能是我的四边形大小和纹理之间的冲突。

截屏

立方体的顶部使用纹理坐标 (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 回答 2

4

纹理大小通常是 2 的幂。我怀疑某些东西将您的 192x96 纹理调整为 256x128 或 256x256 纹理。但是,这并不能真正解释您找到的值...但是,我认为,如果您将纹理的大小调整为 256x256(增加大小,不要缩放!)并据此计算纹理坐标,您的问题就会消失离开。

于 2011-09-28T19:23:08.850 回答
0

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

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

于 2011-09-28T19:11:37.527 回答