gpt4 book ai didi

OpenGL glTexImage2D 数据

转载 作者:行者123 更新时间:2023-12-04 18:10:32 30 4
gpt4 key购买 nike

我正在尝试从 CSV file 中读取浮点数,它包含一个预先计算的纹理,将它存储在一个一维数组中,然后将读取的数据放入一个二维纹理中。
我需要确保以下代码可以做到这一点,因为我在访问数据时遇到了问题,而且我无法弄清楚错误在哪里:

// 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;
}

这里应该没有问题,但让我烦恼的是以下几点:
// 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指向我的一维数组的指针?
数组的大小是宽*高*3,纹理的格式应该是宽*高,有3个 channel ……所以我猜大小​​应该没问题?!
我的程序仍然无法按预期工作,这是一个潜在的错误来源。

最佳答案

我解决了我搞砸的纹理阅读。我不知道是什么让我陷入了困境,但我的阵列的初始化纯属无稽之谈。这是更正后的代码,我在尝试编写测试纹理时发现:

// 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一切正常,而不会改变我阅读纹理的方式。

关于OpenGL glTexImage2D 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236196/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com