目前,我可以加载一个我创建的静态大小的纹理。在这种情况下,它是512 x 512。
这段代码来自头文件:
#define TEXTURE_WIDTH 512
#define TEXTURE_HEIGHT 512
GLubyte textureArray[TEXTURE_HEIGHT][TEXTURE_WIDTH][4];
这里是glTexImage2D的用法:
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA,
TEXTURE_WIDTH, TEXTURE_HEIGHT,
0, GL_RGBA, GL_UNSIGNED_BYTE, textureArray);
这里是我如何填充数组的(大概例子,不是我的代码精确副本):
for (int i = 0; i < getTexturePixelCount(); i++)
{
textureArray[column][row][0] = (GLubyte)pixelValue1;
textureArray[column][row][1] = (GLubyte)pixelValue2;
textureArray[column][row][2] = (GLubyte)pixelValue3;
textureArray[column][row][3] = (GLubyte)pixelValue4;
}
如何更改以便不需要使用TEXTURE_WIDTH和TEXTURE_HEIGHT?也许我可以使用指针样式数组并动态分配内存...
编辑:
我认为我看到了问题,在C++中它实际上无法完成。正如Budric指出的那样,解决方法是使用单个维度数组,但使用所有三个维度相乘来表示将是索引的内容:
GLbyte *array = new GLbyte[xMax * yMax * zMax];
例如要访问 1/2/3 中的 x/y/z,您需要执行以下操作:
GLbyte byte = array[1 * 2 * 3];
然而,问题是,我不认为
glTexImage2D
函数支持此操作。有人能想到一个解决方法来使用这个 OpenGL 函数吗?编辑2: 注意OpenGL开发人员,可以通过使用一维像素数组来克服这个问题... [0]:列0 > [1]:行0 > [2]:通道0 ... n > [n]:行1 ... n > [n]:列1 .. n ... 不需要使用三维数组。在这种情况下,我必须使用此解决方法,因为在C++中显然无法严格使用三维数组。