0

OpenGLでテクスチャを使用する方法を学ぼうとしています。OpenGLRedbookのテクスチャマッピングに関する章を読み始めました。私はそれを理解していなかったので、グーグルでこのチュートリアルを見つけました。指示に従いましたが、まだ動作させることができません。これがコードです。

これは私のテクスチャ画像です。Photoshopを使用してこれに変換しまし。ファイルのサイズは175KBで、ほぼ適切なサイズ(200x300x3 = 180000)です。

別のプログラムでファイルを読み取って、内容が正しいかどうかを確認してみました。約221ピクセル(画像の約1行目)しか読み取れないようで、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 の累乗を必要とする場合や、テクスチャが正方形でなければならない場合があります。ミップマップを使用しなくても機能しますか?

完全なファイルを読み取ることができなかったり、そこに破損したデータが含まれていなくても、ファイルの読み取りが狂った場合、少なくともゴミがテクスチャとして表示されるはずです。

于 2011-12-25T10:17:54.373 に答える
-2

No, there is no problem. Images can contain many zero bytes, to read it all without missing anything, make sure to stat its size.

于 2011-12-25T06:00:46.863 に答える