【问题标题】:C++ - place multiple images in an array pointerC ++ - 将多个图像放在数组指针中
【发布时间】:2014-01-31 04:23:47
【问题描述】:

我一直在尝试使用 SOIL 库将磁盘上存储的十个图像读入一个数组指针。然后我想使用 3D 纹理在 OpenGL 中渲染结果数据。

我编写的用于从磁盘读取图像并将它们存储在缓冲区中的代码引发了Access violation reading location 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

    }
}

【问题讨论】:

  • 旁注,将纹理名称放入数组并通过数组索引获取它们,你为什么这么努力?
  • 确实如此。我只是在使用 SOIL 库,在线文档提供了一种覆盖现有变量/指针的方法。 lonesock.net/soil.html

标签: c++ c opengl


【解决方案1】:

似乎SOIL_load_OGL_texture 没有返回任何缓冲区。相反,它返回一个 Id(GLuint 类型,即unsigned int)。如果函数失败,id 将为零。您将该整数值转换为指针并取消引用它,这会导致访问冲突。

【讨论】:

  • 有趣。我不知道。我假设这会将图像数据直接加载到指针。有没有办法将图像文件加载到数组指针中?然而,代码看起来很合理,对吧?我的印象是这可能是错误的。
  • @Eagle 尝试使用 SOIL_load_image 方法将图像加载到 unsigned char*。 en.wikibooks.org/wiki/OpenGL_Programming/…
  • 酷,正是我需要的!谢谢! :)
  • @Eagle:您可以使用 glTexSubImage3D 将切片逐个切片加载到预先分配的 3D 纹理中,而不是将图像连接到一个大缓冲区中。使用glTexImage3D(…, data=NULL) 使用默认的白色纹理图像初始化纹理对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 2012-05-11
相关资源
最近更新 更多