C++ C++;-在数组指针中放置多个图像
我一直在尝试使用土壤库将存储在磁盘上的十个图像读入数组指针。然后,我想使用3D纹理在OpenGL中渲染生成的数据 我为从磁盘读取图像并将其存储在缓冲区而编写的代码抛出了C++ C++;-在数组指针中放置多个图像,c++,c,opengl,C++,C,Opengl,我一直在尝试使用土壤库将存储在磁盘上的十个图像读入数组指针。然后,我想使用3D纹理在OpenGL中渲染生成的数据 我为从磁盘读取图像并将其存储在缓冲区而编写的代码抛出了访问冲突读取位置0x00000000错误 这是使用SOIL将多个图像存储到数组指针中的正确方法吗 unsigned char *tex; int imSize = h*w; unsigned char *buff = new unsigned char[h * w * slices]; for(int i = 1; i<
访问冲突读取位置0x00000000
错误
这是使用SOIL将多个图像存储到数组指针中的正确方法吗
unsigned char *tex;
int imSize = h*w;
unsigned char *buff = new unsigned char[h * w * slices];
for(int i = 1; i<=10; i++)
{
for(int j = 0; j<imSize; j++)
{
if (i==1)
{
tex = (unsigned char*) SOIL_load_OGL_texture("Data/PA_170090.png",
SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y);
buff[((i-1)*imSize) + j] = tex[j]; }
if (i==2)
{ tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170091.png",
SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y);
buff[(i-1)*imSize + j] = tex[j]; }
if (i==3)
{ tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170092.png",
SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y);
buff[(i-1)*imSize + j] = tex[j];}
....
.... // up to 10 images
}
}
无符号字符*tex;
int imSize=h*w;
unsigned char*buff=新的unsigned char[h*w*切片];
for(int i=1;i似乎SOIL\u load\u OGL\u纹理
)不返回任何缓冲区。相反,它返回一个Id(类型为GLuint
,即无符号int
)。如果该函数失败,id将为零。您正在将该整数值强制转换为指针并取消引用它,这将导致访问冲突。请注意,将纹理名称放入数组中并按数组索引获取它们,为什么您要这么努力?这是真的。我只是在使用土壤库,而联机文档提供了一种覆盖现有变量/指针。很有意思。我不知道这一点。我假设这将直接将图像数据加载到指针。有没有办法将图像文件加载到数组指针中?代码看起来很合理,对吗?我觉得可能是错的。@Eagle尝试使用SOIL\u load\u image方法将图像加载到unsigned char*.Cool,这正是我需要的!谢谢!:)@Eagle:您可以使用glTexSubImage3D将切片逐个加载到预先分配的3D纹理切片中,而不是将图像连接到大缓冲区中。使用glTexImage3D(…,data=NULL)
使用默认白色纹理图像初始化纹理对象。