私はOpenGLのテクスチャマッピングを解明しようとしています。私は簡単な例を得ることはできません。単純なOpenGLテクスチャマップは機能しませんか?
ポリゴンが描画されていますが、テクスチャではなく単色です。また、glDrawPixelsを使ってうまくいきましたので、ビットマップが正しくスプライト1 []にロードされています。
テクスチャ名を取得するのにglGenTexturesを使用しますが、texName1は変更されません。このGLuintは、glGenTexturesの呼び出し後であっても、私が初期化したもので...
私はGL_TEXTURE_2Dを有効にしました。
相続コード:
GLuint texName1 = 0;
glGenTextures(1, &texName1);
glBindTexture(GL_TEXTURE_2D, texName1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
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);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, sprite1[18], sprite1[22], 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, &sprite1[54]);
glColor3f(1, 1, 0);
glBindTexture(GL_TEXTURE_2D, texName1);
glBegin(GL_QUADS);
glTexCoord2f (0.0, 0.0);
glVertex3f (0.0, 0.0, -5.0f);
glTexCoord2f (1.0, 0.0);
glVertex3f (.5, 0.0, -5.0f);
glTexCoord2f (1.0, 1.0);
glVertex3f (.5, .5, -5.0f);
glTexCoord2f (0.0, 1.0);
glVertex3f (0.0, .5, -5.0f);
glEnd();
UPDATE: 私は途方に暮れてよ。ここで私が試したすべてのものです:
がOGLが初期化される前に、私は私の風合いを初期化して判明。テクスチャは、クラスコンストラクタで初期化され(glGenTextures-> glTexImage2D)、すべてのフレームと呼ばれるメンバ関数で描画されます(glBegin-> glEnd)。 genTexturesが正常に動作しているように見えます。
GL_RGBA8、GL_BGRA_EXT(GL_BGRAは私のシステムでは動作しませんが、_EXTが必要です)アルファチャンネルをビットマップから削除し、GL_RGB、GL_BGR_EXTなどのすべての組み合わせを試しました。
手続きビットマップを作成し、
がGL_COLOR_MATERIALが有効になっていないことを確認したことを使用してみました。
ビットマップサイズを32x32に変更しました。
glTexEnvfの代わりにglTexEnviを試しました。
glGenTexturesの後にtexName1が残っている場合は、エラー状態をチェックする必要があります。 –
スプライト1 []内で幅と高さがバイトまたは整数として保存されていますか? –
幅と高さはバイトのリトルエンディアンとして格納されます。私はglDrawPixelsでsprite1 [18]とsprite1 [22]を使っていました。彼らは正しいです。ビットマップはわずか29x20ピクセルなので、動作します。 –