切片图像来映射不同的纹理

时间:2013-06-11 03:54:54

标签: opengl

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

我该怎么做?一种选择是偏离预先切片图像。但这可以使用glTexSubImage2D或一些类似/不同的API来完成吗?

3 个答案:

答案 0 :(得分:3)

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

了解详情:http://www.glprogramming.com/red/chapter09.html#name6

答案 1 :(得分: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)。然后,您的纹理将分为四层。

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

请注意,如果您要生成mipmap,需要可以在使用glTexStorage3D分配存储时定义级别数。

答案 2 :(得分:1)

我认为你有三种选择。

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

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

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

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