0

テクスチャをロードするコードは次のとおりです。この例を使用してファイルをロードしようとしました。gifファイルです。gif ファイルをロードできるかどうか、または raw ファイルのみをロードできるかどうかを尋ねることはできますか?

void setUpTextures()
{

    printf("Set up Textures\n");
    //This is the array that will contain the image color information.
    // 3 represents red, green and blue color info.
    // 512 is the height and width of texture.
    unsigned char earth[512 * 512 * 3];

    // This opens your image file.
    FILE* f = fopen("/Users/Raaj/Desktop/earth.gif", "r");
    if (f){
        printf("file loaded\n");
    }else{
        printf("no load\n");
        fclose(f);
        return;
    }

    fread(earth, 512 * 512 * 3, 1, f);
    fclose(f);


    glEnable(GL_TEXTURE_2D);

    //Here 1 is the texture id
    //The texture id is different for each texture (duh?)
    glBindTexture(GL_TEXTURE_2D, 1);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    //In this line you only supply the last argument which is your color info array,
    //and the dimensions of the texture (512)
    glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE,earth);

    glDisable(GL_TEXTURE_2D);
}


void Draw()
{

    glEnable(GL_TEXTURE_2D);
    // Here you specify WHICH texture you will bind to your coordinates.
    glBindTexture(GL_TEXTURE_2D,1);
    glColor3f(1,1,1);


    double n=6;
    glBegin(GL_QUADS);
    glTexCoord2d(0,50);     glVertex2f(n/2, n/2);
    glTexCoord2d(50,0);     glVertex2f(n/2, -n/2);
    glTexCoord2d(50,50);    glVertex2f(-n/2, -n/2);
    glTexCoord2d(0,50);     glVertex2f(-n/2, n/2);
    glEnd();
    // Do not forget this line, as then the rest of the colors in your
    // Program will get messed up!!!
    glDisable(GL_TEXTURE_2D);
}

そして、私が得るのはこれだけです: ここに画像の説明を入力

理由をお聞かせいただけますか?

4

1 に答える 1

5

基本的に、いいえ、任意のテクスチャ フォーマットを GL に与えることはできません。GL は、エンコードされたファイルではなく、ピクセル データのみを必要とします。

あなたのコードは、投稿されているように、24 ビット RGB データの配列を明確に宣言していますが、GIF ファイルを開いてその量のデータを読み込もうとしています。GIF は圧縮されてパレット化された形式であり、ヘッダー情報などを完備しているため、決して機能しません。

ファイルを生のピクセルに解凍するには、画像ローダーを使用する必要があります。

また、テクスチャ座標が正しく見えません。4 つの頂点がありますが、3 つの異なる座標のみが使用され、2 つの隣接する座標は互いに対角線上にあります。テクスチャが正しくロードされていたとしても、それが望み通りになることはほとんどありません。

于 2013-02-27T11:16:56.830 に答える