gpt4 book ai didi

c++ - 如何将 .pgm 纹理文件加载到 openGL

转载 作者:行者123 更新时间:2023-11-28 06:56:11 26 4
gpt4 key购买 nike

到目前为止我有这段代码:

ifstream textureFile;
char* fileName="BasketBall.pgm";
textureFile.open(fileName, ios::in);
if (textureFile.fail()) {
displayMessage(ERROR_MESSAGE, "initTexture(): could not open file %s",fileName);
}
skipLine(textureFile); // skip the "P2" line in the Net.pgm file.
textureFile >> textureWidth; // read in the width
textureFile >> textureHeight; // read in the height
int maxGrayScaleValue;
textureFile >> maxGrayScaleValue; // read in the maximum gray value (255 in this case)
texture = new GLubyte[textureWidth*textureHeight];

int grayScaleValue;
for (int k = 0; k < textureHeight; k++) {
for(int l = 0; l < textureWidth; l++) {
textureFile >> grayScaleValue;
texture[k * textureWidth + l]=(GLubyte) grayScaleValue;
}
}
textureFile.close();

glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, textureWidth, textureHeight,
0, GL_RGBA, GL_UNSIGNED_BYTE, texture);

但是当我在构建成功后尝试运行它时,它只是说我的项目已经“停止工作”。

最佳答案

这很可能是由于您正在尝试将灰度图像加载到 RGBA 容器中。

我可以想到两种方法来尝试解决您的问题:

首先是将texture放大3倍,并将灰度值加载到3个连续的空间中。所以:

texture = new GLubyte[textureWidth*textureHeight*3];

for (int k = 0; k < textureHeight; k++) {
for(int l = 0; l < textureWidth; l+=3) {
textureFile >> grayScaleValue;
texture[k * textureWidth + l]=(GLubyte) grayScaleValue;
texture[k * textureWidth + l + 1]=(GLubyte) grayScaleValue;
texture[k * textureWidth + l + 2]=(GLubyte) grayScaleValue;
}
}

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureWidth, textureHeight, 
0, GL_RGB, GL_UNSIGNED_BYTE, texture);

第二种是只用一个 channel 试试:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, textureWidth, textureHeight, 
0, GL_RED, GL_UNSIGNED_BYTE, texture);

除此之外,我建议使用调试器和断点逐步执行代码并找出崩溃的位置,但正如我上面提到的,这可能是因为您将单 channel 纹理传递到期望 4 的容器中 channel 。

关于c++ - 如何将 .pgm 纹理文件加载到 openGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23150538/

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