C ++ - 将多个图像放在数组指针中

Posted

技术标签:

【中文标题】C ++ - 将多个图像放在数组指针中【英文标题】:C++ - place multiple images in an array pointer 【发布时间】: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 【参考方案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) 使用默认的白色纹理图像初始化纹理对象。

以上是关于C ++ - 将多个图像放在数组指针中的主要内容,如果未能解决你的问题,请参考以下文章

C语言指针学习总结

从 numpy 数组获取指针以将图像发送到 C++

C 语言二级指针内存模型 ( 指针数组 | 二维数组 | 自定义二级指针 | 将 一二 模型数据拷贝到 三 模型中 并 排序 )

C 语言二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )

C++ 指针与数组

C语言指针进阶第二站:指针数组!