0

即時モード テクスチャを使用して単純なプロジェクトを構築しようとしています。残念ながら、レンダリングすると、テクスチャではなく GL カラーが表示されます。解決策を探しましたが、オンラインの例と私のコードの間に意味のある違いは見つかりませんでした。

ここで提供した最小限の失敗例に減らしました。私の理解が正しければ、これにより、黒、赤、緑、青のコーナーを持つテクスチャ付きのクワッドが生成されるはずです。残念ながら、テクスチャを完全に無視しているかのように紫色に見えます。私は何を間違っていますか?

#include <glut.h>

GLuint tex;

void displayFunc() {
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, tex);
    glBegin(GL_TRIANGLE_STRIP);
    glColor3f(0.5, 0, 1);
    glTexCoord2f(0.0, 0.0);
    glVertex2f(-1.0, -1.0);

    glTexCoord2f(1.0, 0.0);
    glVertex2f(1.0, -1.0);

    glTexCoord2f(0.0, 1.0);
    glVertex2f(-1.0, 1.0);

    glTexCoord2f(1.0, 1.0);
    glVertex2f(1.0, 1.0);
    glEnd();

    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(640, 480);
    glutCreateWindow("Test");
    glutDisplayFunc(displayFunc);

    GLubyte textureData[] = { 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255, 255, 255, 0 };
    GLsizei width = 2;
    GLsizei height = 2;

    glGenTextures(1, &tex);
    glBindTexture(GL_TEXTURE_2D, tex);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_RGB8, GL_UNSIGNED_BYTE, (GLvoid*)textureData);

    glutMainLoop();
}

出力: クワッドは紫

また、おそらく言及する価値があります:

このプロジェクトを Mac (El Capitan 10.11.1 を実行) でビルドしています。

グラフィックカード: NVIDIA GeForce GT 650M 1024 MB

4

1 に答える 1

2

に無効な引数を渡していますglTexImage2D()は、7 番目の ( format ) 引数GL_RGB8でサポートされている値の 1 つではありません。正しい値はです。GL_RGB

のようなサイズ指定された形式は、 internalFormat引数GL_RGB8に使用されます。その場合、値はコンポーネントの数と、テクスチャの内部ストレージに使用される各コンポーネントのサイズの両方を定義します。

フォーマットパラメータとタイプパラメータは、渡すデータを定義します。これらの場合、フォーマットはコンポーネントの数のみを定義し、タイプは各コンポーネントのタイプとサイズを定義します。

OpenGL コードで問題が発生した場合はいつでも、呼び出しglGetError()てエラーをチェックしてください。この場合、呼び出しGL_INVALID_ENUMによって発生したエラーが表示されますglTexImage2D()

于 2015-12-13T22:37:46.787 に答える