在OpenGL修复函数编程中,我是否可以在不同对象上映射不同的纹理,但该纹理仅从一个图像生成。对于例如我有1024 X 1024图像。我的场景中有四个矩形。现在我想将图像切割成256 X 256 * 4并将这些切片图像映射为纹理。
我该怎么做?一种选择是偏离预先切片图像。但这可以使用glTexSubImage2D或一些类似/不同的API来完成吗?
答案 0 :(得分:3)
是的,您可以使用纹理坐标,指示您希望将纹理的哪些部分映射到对象上,而不是映射整个事物。
答案 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)
我认为你有三种选择。
为每个不同的矩形使用不同的纹理坐标。
使用glMatrixMode(GL_TEXTURE)
转换纹理坐标,并在绘制每个矩形之间使用不同的矩阵。
从原始大纹理中创建四种不同的OpenGL纹理。我不认为OpenGL在这里为您提供任何帮助。您必须使用绘图包来执行此操作(如果您只需要执行此操作,则最简单的选项),或者在调用glTexImage2D
之前将图像的一部分复制到新缓冲区中。
我认为第一个选项是最简单的,其优点是您不必在绘制矩形之间更改任何状态。