1

在 OpenGL 修复函数编程中,我是否可以在不同的对象上映射不同的纹理,但该纹理仅从一个图像生成。例如,我有 1024 X 1024 图像。我的场景中有四个矩形。现在我想将图像切成 256 X 256 *4 并将这些切片图像映射为纹理。

我怎样才能做到这一点。一种选择是对图像进行预切片。但这可以使用 glTexSubImage2D 或一些类似/不同的 API 来完成吗?

4

3 回答 3

3

是的,您可以使用纹理坐标,它指示您希望将纹理的哪些部分映射到对象上,而不是映射整个事物。

阅读更多:http ://www.glprogramming.com/red/chapter09.html#name6

于 2013-06-11T03:58:27.490 回答
2

编辑:着色器需要使用数组纹理:http ://www.opengl.org/registry/specs/EXT/texture_array.txt 。我会留下答案,因为它可能仍然是有用的信息。

我想您可以为此使用数组纹理:http ://www.opengl.org/wiki/Array_Texture

您制作了 256 x 2048 的纹理。加载纹理时,您指定层大小 (256 x 256) 和层数 (4)。然后,您的纹理将分为四层。

您可以使用 UVs 访问纹理:[x, y, LayerId]

请注意,如果要生成 mipmap,则需要在分配存储时定义级别数glTexStorage3D

于 2013-06-11T05:21:04.873 回答
1

我认为你有三个选择。

  1. 为每个不同的矩形使用不同的纹理坐标。

  2. glMatrixMode(GL_TEXTURE)使用和绘制每个矩形之间的不同矩阵转换纹理坐标。

  3. 从原始的大纹理创建四种不同的 OpenGL 纹理。我不认为 OpenGL 在这里为您提供任何帮助。您必须使用绘画包来执行此操作(如果您只需执行几次,这是最简单的选择),或者在调用之前将图像的一部分复制到新缓冲区中glTexImage2D

我认为第一个选项是最简单的,其优点是您不必在绘制矩形之间更改任何状态。

于 2013-06-11T08:36:15.277 回答