我试图从CSV file包含预先计算的纹理的a中读取浮点数,将其存储在1维数组中,然后将读取的数据放入2维纹理中.
我需要确保以下代码执行此操作,因为我在访问数据时遇到问题而我无法确定错误的位置:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
这里应该没有问题,但令我困扰的是以下几点:
// 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]);
Run Code Online (Sandbox Code Playgroud)
难道还好只是给glTexImage2D指针到我的一维数组?
数组的大小是宽*高*3,纹理的格式应该是宽*高3个通道...所以大小应该没问题我猜?我的程序仍然不能按预期工作,这是一个错误的潜在来源.
嘿伙计们,我解决了我乱糟糟的纹理阅读...我不知道是什么进入了我,但我的阵列的启动是纯粹的无意义.这是更正的代码,我在尝试编写测试纹理时发现:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
此外,它现在可以独立于内部格式工作.GL_RGB, GL_RGBA, GL_RGB32F and GL_RGBA32F所有工作都没有改变我读取纹理的方式.
谢谢你们!
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_FLOAT, &image[0]);
Run Code Online (Sandbox Code Playgroud)
您应该使用浮点内部格式。例如,GL_RGB32F。那应该是第三个参数。
| 归档时间: |
|
| 查看次数: |
11118 次 |
| 最近记录: |