OpenGL纹理不起作用

时间:2011-12-25 05:57:57

标签: c++ opengl texture-mapping texture2d

我正在尝试学习如何在OpenGL中使用纹理。我开始阅读OpenGL红皮书中关于纹理映射的章节。我不明白所以我用Google搜索并找到了this tutorial。我按照说明操作,但仍然无法使其工作。 This是代码。

This是我的纹理图像。我用Photoshop将其转换为this。文件大小为175KB,大小合适(200x300x3 = 180000)。

我尝试在另一个程序中读取该文件,看看内容是否正确。似乎我只能读取大约221个像素(大约是图像的第一行)并且它达到了eof()。在我的程序中,我尽可能多地阅读,但是当我调试时,我注意到在一些点之后字节归零

现在我很困惑。我的程序有问题吗?纹理有问题吗?我有问题吗?我究竟做错了什么?我该如何解决?

3 个答案:

答案 0 :(得分:1)

问题是你的代码。您尝试使用文本模式读取二进制文件。而是使用以下代码:

ifstream tex("ace.raw", ios::in | ios::binary);
if(tex.is_open())
  for(int j=0; j<imH; ++j)
    for(int i=0; i<imW; ++i)
      for(int k=0; k<3; ++k)
      {
        face[j][i][k] = tex.get();
      }

tex.close();

或更短且等效的代码:

ifstream tex("ace.raw", ios::in | ios::binary);
if (tex.is_open())
  tex.read((char*)face, sizeof(face));

tex.close();

两个代码都经过测试,“face”变量与“ace.raw”完全相同。

答案 1 :(得分:-1)

纹理如何显示?这是垃圾吗?它只是纯白色(即没有纹理)?根据您的图形卡,您的纹理可能需要2的幂作为宽度/高度和/或您的纹理必须是正方形。没有使用mipmap会有效吗?

即使没有能够读取完整的文件或在那里有一些损坏的数据,如果阅读文件变得疯狂,你至少应该看到一些垃圾作为纹理。

答案 2 :(得分:-2)

不,没有问题。图像可以包含许多零字节,在不遗漏任何内容的情况下读取所有内容,请确保统计其大小。