0

我正在尝试学习如何在 OpenGL 中使用纹理。我开始阅读 OpenGL Redbook 中关于纹理映射的章节。我不明白,所以我用谷歌搜索并找到了这个教程。我按照说明进行操作,但仍然无法正常工作。是代码。

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

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

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

4

3 回答 3

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”完全相同的内容。

于 2011-12-25T13:26:46.627 回答
-1

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

即使无法读取完整的文件或其中有一些损坏的数据,如果读取文件变得疯狂,您至少应该看到一些垃圾作为纹理。

于 2011-12-25T10:17:54.373 回答
-2

不,没有问题。图像可以包含许多零字节,要读取所有内容而不会丢失任何内容,请确保统计其大小。

于 2011-12-25T06:00:46.863 回答