首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGl glTexImage2D数据

OpenGl glTexImage2D数据
EN

Stack Overflow用户
提问于 2013-03-06 07:33:57
回答 2查看 12.4K关注 0票数 6

我正在尝试从一个包含预计算纹理的CSV file中读取浮点数,将其存储在一个一维数组中,然后将读取的数据放入一个二维纹理中。

我需要确保下面的代码做到这一点,因为我在访问数据时遇到了问题,并且我找不出错误在哪里:

代码语言:javascript
复制
// Allocate memory  
float * image = new float [width * height * 3 ];  
for( int i = 0; i < height; i++)  
    {  
        for( int j = 0; j < width-1; j++)  
            {  
                fscanf( fDataFile, "%f,", &fData );  
                image[ 4 * i * j + 0 ] = fData;  
                image[ 4 * i * j + 1 ] = fData;  
                image[ 4 * i * j + 2 ] = fData;  
            }  
        fscanf( fDataFile, "%f", &fData );  
        image[ 4 * i * width-1 + 0 ] = fData;  
        image[ 4 * i * width-1 + 1 ] = fData;  
        image[ 4 * i * width-1 + 2 ] = fData;  
     }   

这里应该不会有什么问题,但让我困扰的是:

代码语言:javascript
复制
// create the texture  
glGenTextures(1, &texHandle);  
glBindTexture(GL_TEXTURE_2D, texHandle);   
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_FLOAT, &image[0]); 

可以只给glTexImage2D指向我的一维数组的指针吗?

数组的大小是width*height*3,纹理的格式应该是width*height with 3 channel...所以我想大小应该没问题吧?!尽管如此,我的程序仍然不会像预期的那样工作,这是一个潜在的错误来源。

EN

回答 2

Stack Overflow用户

发布于 2013-03-06 23:58:19

我解决了我混乱的纹理读取问题。我不知道我是怎么回事,但是我的数组的初始化纯粹是无关紧要的。以下是我在尝试编写测试纹理时发现的更正后的代码:

代码语言:javascript
复制
// Allocate memory  
float * image = new float [width * height * 3 ];  
for( int i = 0; i < height; i++)  
{  
    for( int j = 0; j < width-1; j++)  
    {  
        fscanf( fDataFile, "%f,", &fData );  
        image[ 3 * (i * width + j) + 0 ] = fData;  
        image[ 3 * (i * width + j) + 1 ] = fData;  
        image[ 3 * (i * width + j) + 2 ] = fData;  
        //image[ 4 * i * j + 2 ] = 1.0f;  
    }  
    fscanf( fDataFile, "%f", &fData );  
    image[ 3 * (i * width + width-1) + 0 ] = fData;  
    image[ 3 * (i * width + width-1) + 1 ] = fData;  
    image[ 3 * (i * width + width-1) + 2 ] = fData;  
    //image[ 4 * i * width-1 + 2 ] = 1;  
}  

此外,它现在可以独立于内部格式工作。GL_RGB, GL_RGBA, GL_RGB32F and GL_RGBA32F在不改变我读取纹理的方式的情况下都工作得很好。

票数 5
EN

Stack Overflow用户

发布于 2013-03-06 08:23:44

代码语言:javascript
复制
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_FLOAT, &image[0]);

您应该使用floating-point internal format。例如,GL_RGB32F。这应该是第三个参数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15236196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档