我想从CSV file
中读取包含预计算纹理的浮点数,将其存储在1维数组中,然后将读取的数据放入2维纹理中。
我需要确保下面的代码这样做,因为我有访问数据的问题,我不能找出错误所在:OpenGl glTexImage2D数据
// 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通道...所以大小应该没问题,我猜?! 仍然我的程序不能按预期工作,这是一个错误的潜在来源。
实际上,将纹理指定为一维数组是您将纹理传递给OpenGL的最常用方法之一。在指定宽度和高度以及像素格式(您的“3通道”语句)时,您也是正确的。所有这些与你在这里提供的内容看起来是正确的。您的纹理是否在几何图形上不显示?你有没有使用'glTexParamter'指定缩小过滤器?如果没有,请尝试用'GL_NEAREST'调用它来查看你的纹理是否出现。你可以从那里改进。 – radical7 2013-03-06 05:36:36
嘿!感谢您的快速和鼓励的答案!在阅读文件时,我发现有一个错误。之前我也有一个alpha通道,所以我写了'image [4 * i * width-1 + 1] = fData;'而不是'image [3 * i * width-1 + 1] = fData;'我想该错误在另一行代码中。但我现在更有信心找到它!谢谢! – molostil 2013-03-06 12:41:22