TGALoader 正在加载垂直轴镜像的图像
TGALoader is loading image mirrored in vertical axis
使用 Targa 图像作为纹理加载带有 .mtl material 的 .obj 模型,图像以镜像方式加载。
可以注意到下面的image,左边是.tga,右边是.png。
在图像编辑器中打开两个图像,它们显示为相同。而且,只要 .png 图像加载正确,问题出在我用于 .tga 的加载器中。
我正在使用 TGALoader class 加载纹理。该问题似乎与来自 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的参数是什么意思。。。请问各位大神能帮我解答下吗,我的问题怎么解决?
你的纹理被翻转了。使用此模式:
var loader = new THREE.TGALoader();
var texture = loader.load( 'myTexture.tga' );
texture.flipY = true;
three.js r.74
使用 Targa 图像作为纹理加载带有 .mtl material 的 .obj 模型,图像以镜像方式加载。 可以注意到下面的image,左边是.tga,右边是.png。
在图像编辑器中打开两个图像,它们显示为相同。而且,只要 .png 图像加载正确,问题出在我用于 .tga 的加载器中。
我正在使用 TGALoader class 加载纹理。该问题似乎与来自 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的参数是什么意思。。。请问各位大神能帮我解答下吗,我的问题怎么解决?
你的纹理被翻转了。使用此模式:
var loader = new THREE.TGALoader();
var texture = loader.load( 'myTexture.tga' );
texture.flipY = true;
three.js r.74