2

ウィンドウに画像をレンダリングしようとしています。超シンプル(またはそう思った)。私が何をしても、私はいつもこの紫色の正方形を手に入れます。私のコードのいくつかのヒント:

// load image from file, called one time on load:
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
glEnable(GL_DEPTH_TEST);

RgbImage theTexMap( filename );

glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, theTexMap.GetNumCols(), theTexMap.GetNumRows(), 0, GL_RGB, GL_UNSIGNED_BYTE, theTexMap.ImageData() );

// render quad and texture, called inside glutDisplayFunc callback
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-50.0, -50.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-50.0, 50.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(50.0, 50.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(50.0, -50.0, 0.0);
glEnd();

glFlush();
glDisable(GL_TEXTURE_2D);

サードパーティのライブラリ(ARToolkit)から例を拡張しようとしているため、多くのコードを切り取っています。ここに表示する必要があるよりもはるかに多くのコードがあります。

クワッドを表示するが、テクスチャ/画像をレンダリングしない、私が犯している可能性のある間違いのアイデアはありますか?

代替テキスト

4

5 に答える 5

2

JustInCase glutDisplayFunc()™のコールバックでテクスチャオブジェクトを再バインドします。

また、私は少し不機嫌ですGL_RGBA8。試してみてくださいGL_RGBA。おそらく私の側の迷信です。

于 2010-10-01T22:21:36.580 に答える
0

自分で試さずにDunnoですがGL_RGBA8、内部フォーマットとGL_RGBピクセルフォーマットに使用しているのは少し奇妙に思えます。

個人的には、テクスチャで使用しない限り、GL_DISABLE(GL_LIGHTING)テクスチャオブジェクトにも使用します。それが役立つかどうかはわかりませんが、ライトとテクスチャの組み合わせに関しては、実際には理解できなかったことがいくつかあります。心配しています。

于 2010-10-01T22:29:08.487 に答える
0

いくつかのアイデア:

テクスチャを設定してアップロードする前に、glEnable(GL_TEXTURE_2D)を呼び出すべきではありませんか?

テクスチャの寸法が2の累乗であることを確認しましたか?

GL_LINEARの拡大/縮小関数を使用する場合は、元のテクスチャからミップマップを生成することをお勧めします。

于 2010-10-01T22:35:58.417 に答える
0

GL_MODULATEではなくGL_REPLACEを使用しようとしましたか?

頂点に色を渡すことはありません。GL_MODULATEは現在の色で変調します。

于 2010-10-02T08:39:19.717 に答える
-2

テクスチャはMIPレベル0のみを指定し、他のMIPレベルは指定しないため、MIPレベル0でレンダリングされていない場合、結果は未定義になる可能性があります。簡単な修正は次のとおりです。

glTexParameteri(GL_TEXTURE_2D、GL_GENERATE_MIPMAP、GL_TRUE);

簡単な間違いです。良い参考資料:

http://www.opengl.org/wiki/Common_Mistakes

于 2010-10-01T23:05:02.373 に答える