目前,我可以加载我创建的静态大小的纹理。在这种情况下,它是 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 指出的解决方法是使用一维数组,但使用所有 3 个维度相乘来表示索引:
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
...无需使用 3 维数组。在这种情况下,我不得不使用这项工作,因为 3 维数组在 C++ 中显然是不可能的。