2016-03-08 52 views
0

使用Targa图像作为纹理加载.mtl材质的.obj模型,图像被加载镜像。 在以下的image中可以注意到,左边的是.tga,右边的是.png。TGALoader正在加载镜像在垂直轴上的图像

在图像编辑器中打开两个图像,它们显示的是相同的。而且,只要.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; 

    } 

如果从开关结果为0×02时,图像会被加载修正,而不被镜像。我已经测试过不同的.tga图像,并且它们都导致了相同的镜像。

我不明白开关的参数意味着什么......你们能帮我弄清楚,我怎么能解决我的问题?

回答

0

您的纹理翻转。使用此模式:

var loader = new THREE.TGALoader(); 

var texture = loader.load('myTexture.tga'); 

texture.flipY = true; 

three.js所r.74

+0

啊,但是怎么来的巴纽版本正确加载,并且.TGA是不是?我认为这是TGALoader中的一个问题。有没有一种方法可以自动检查图像是否翻转?为什么我在使用之前总是纠正它? –

+0

由于.tga文件被视为“THREE.DataTexture”,默认情况下不会翻转Y.研究源代码,或者用调试器逐步完成。 – WestLangley

+0

在r.76dev的'TGALoader'中修正了一个bug。设置'flipY'应该不再是必要的。 – WestLangley