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图像,并且它们都导致了相同的镜像。
我不明白开关的参数意味着什么......你们能帮我弄清楚,我怎么能解决我的问题?
啊,但是怎么来的巴纽版本正确加载,并且.TGA是不是?我认为这是TGALoader中的一个问题。有没有一种方法可以自动检查图像是否翻转?为什么我在使用之前总是纠正它? –
由于.tga文件被视为“THREE.DataTexture”,默认情况下不会翻转Y.研究源代码,或者用调试器逐步完成。 – WestLangley
在r.76dev的'TGALoader'中修正了一个bug。设置'flipY'应该不再是必要的。 – WestLangley