【问题标题】:Strange issues with texture mapping纹理映射的奇怪问题
【发布时间】:2019-08-13 11:25:42
【问题描述】:

我正在尝试使用预先生成的 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。

【问题讨论】:

    标签: java opengl lwjgl


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 没有缝隙,都是实心的。但是,我怀疑这是问题所在,因为坐标在 0.25f 处完美工作。开始怀疑四边形大小是否在拉伸纹理坐标,因为 1.5x0.25 非常接近 0.33,这是正确的。现在检查一下。
      猜你喜欢
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 2015-12-19
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多