0

Targa イメージをテクスチャとして使用して .mtl マテリアルを含む .obj モデルをロードすると、イメージがミラーリングされてロードされます。次の画像で、左が .tga で右が .png であることがわかります。

画像エディターで両方の画像を開くと、同じであることがわかります。そして、.png 画像が正しく読み込まれている限り、.tga に使用しているローダーに問題があります。

TGALoaderクラスを使用してテクスチャをロードしています。この問題は、TGALoader.js の関数 getTgaRGBA の次のコードに関連しているようです。

TGA_ORIGIN_MASK = 0x30,
TGA_ORIGIN_SHIFT = 0x04,
TGA_ORIGIN_BL = 0x00,
TGA_ORIGIN_BR = 0x01,
TGA_ORIGIN_UL = 0x02,
TGA_ORIGIN_UR = 0x03;

function getTgaRGBA( width, height, image, palette ) {
    var x_start,
        y_start,
        x_step,
        y_step,
        x_end,
        y_end,
        data = new Uint8Array( width * height * 4 );
    //switch ( 0x02 ) {
    switch ( ( header.flags & TGA_ORIGIN_MASK ) >> TGA_ORIGIN_SHIFT  ) {
        default:
        case TGA_ORIGIN_UL:
            x_start = 0;
            x_step = 1;
            x_end = width;
            y_start = 0;
            y_step = 1;
            y_end = height;
            break;

        case TGA_ORIGIN_BL:
            x_start = 0;
            x_step = 1;
            x_end = width;
            y_start = height - 1;
            y_step = - 1;
            y_end = - 1;
            break;

        case TGA_ORIGIN_UR:
            x_start = width - 1;
            x_step = - 1;
            x_end = - 1;
            y_start = 0;
            y_step = 1;
            y_end = height;
            break;

        case TGA_ORIGIN_BR:
            x_start = width - 1;
            x_step = - 1;
            x_end = - 1;
            y_start = height - 1;
            y_step = - 1;
            y_end = - 1;
            break;

    } 

スイッチの結果が 0x02 の場合、イメージはミラーリングされずに修正されてロードされます。さまざまな .tga イメージでテストしましたが、すべて同じミラーリングになりました。

switch のパラメータが何を意味するのかよくわかりません...それを理解するのを手伝ってもらえますか、どうすれば私の問題を解決できますか?

4

1 に答える 1