Three.js部分拉伸纹理

时间:2014-03-11 13:27:46

标签: javascript three.js textures webgl collada

我正在使用Collada加载程序在Three.js r65中加载我的3D对象。在加载回调时,我使用以下代码立即将纹理应用于模型的所有部分。

var loader = new THREE.ColladaLoader();

loader.options.convertUpAxis = true;
loader.load('obj/cdg/Grenada-test1.dae', function(collada) {

    var texture = new THREE.ImageUtils.loadTexture("../models/textures/Gr1 08869 Bready Grey.jpg");


    var material = new THREE.MeshPhongMaterial({map: texture, tranparent: true});
    for (var i = 0; i < collada.scene.children.length; i++) {
        collada.scene.children[i].material = material;
    }

});

在Three.js中它看起来像这样(纹理在某些位置拉伸)。

Couch in Three.js

在应用了纹理的Unity 3D中,对象显示正常,请参见下图。

Couch in unity

我尝试过:

  • 更新Three.js和Blender中的UV映射
  • 将模型加载到其他程序(Unity 3D)中以查看是否出现问题
  • 搜索了许多SO问题,但无济于事

有谁知道这里发生了什么以及如何解决这个奇怪的纹理问题?

提前致谢!

修改

这就是texture.repeat.set( 2, 2 )的样子 Three.js model with texture repeat 2

这是texture.repeat.set( 10, 10 )的样子 Three.js model with texture repeat 10

纹理重复使纹理消失,纯色正在取代纹理......

3 个答案:

答案 0 :(得分:4)

wrapSwrapT属性设置为THREE.RepeatWrapping

texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;

并确保你的纹理是&#34; 2&#34;的力量。那是16x16,32x32,64x64,128x64等

答案 1 :(得分:1)

您是否尝试打开纹理重复?像这样:

texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 2, 2 );

答案 2 :(得分:0)

  

ok ..但是如何在同一个对象上应用多个纹理?任何解决方案?

您可能希望使用materialArray并为要纹理化的顶点的每个面添加不同的纹理。