在不更改UV坐标的情况下调整OpenGL纹理的大小

时间:2018-07-16 21:23:50

标签: opengl textures lwjgl texture-atlas

我有一个在游戏过程中生成的纹理图集。根据播放器移动时可见的纹理来加载和卸载纹理。

问题是当地图集中容纳的纹理太多而我需要调整其大小时,但是如果我只是简单地通过将其复制到更大的纹理中来调整纹理地图集的大小,则我需要将所有内容重新渲染为更新四边形的UV坐标。

是否可以以某种方式创建OpenGL纹理并在UV坐标中将其宽度和高度定义为1以外的值?

1 个答案:

答案 0 :(得分:2)

一种解决方案是使用texel坐标而不是归一化坐标(假设放大后不会缩放或在图集内移动图像)。如果您可以忍受它们的局限性(没有包装,没有mipmap,只有线性过滤),则可以只使用Rectangle Textures并称之为一天。另外,您可以简单地将缩放因子应用于顶点着色器中的纹理坐标,方法是将其作为统一变量传递,或者使用textureSize() GLSL函数直接在着色器中查询纹理尺寸。

或者,您可以考虑使用Array Texture来保存多个地图集。不必扩大现有地图集为更多子图像腾出空间,您只需在另一个阵列切片中启动一个新的地图集即可。这样,所有现有子图像的纹理坐标将保持不变……