3d Three.js-在从OBJ文件加载的网格上加载jpg纹理

3d Three.js-在从OBJ文件加载的网格上加载jpg纹理,3d,three.js,3d,Three.js,我有一个加载了objmtloader的人体网格,我想在其上应用skin.jpg 加载纹理和OBJ文件: var texloader = new THREE.TextureLoader(); var skinTexture = texloader.load('/test/skin.jpg', function (tex) { skinTexture = tex; skinTexture.needsUpdate = true; }); skinTexture.wrapS = THRE

我有一个加载了
objmtloader
的人体网格,我想在其上应用
skin.jpg

加载纹理和OBJ文件:

var texloader = new THREE.TextureLoader();
var skinTexture = texloader.load('/test/skin.jpg', function (tex) {
    skinTexture = tex;
    skinTexture.needsUpdate = true;
});
skinTexture.wrapS = THREE.RepeatWrapping;
skinTexture.wrapT = THREE.RepeatWrapping;
skinTexture.repeat.set( 4, 4 );


var loader = new THREE.OBJMTLLoader();

loader.load( '/test/body.obj', 'test/body.mtl', function ( res ) {
    body = res;

    var _body = body.children[0].children[1]
    _body.material = new THREE.MeshLambertMaterial( {
        map: skinTexture
    });
    _body.geometry.computeVertexNormals();

    scene.add( body );

}, onProgress, onError );
我有一个简单的立方体,我在上面渲染皮肤:

    var cubeGeometry = new THREE.BoxGeometry( 1, 1, 1 );
    var cubeMaterial = new THREE.MeshPhongMaterial({
        map: skinTexture
    });
    cube = new THREE.Mesh( cubeGeometry, cubeMaterial );
    scene.add( cube );
我看到的是:

立方体上涂有皮肤,但身体只是不知何故才得到它的颜色。如果我将
map:skinTexture
更改为
color:0xff0000
身体会改变颜色,因此参数应该是正确的

这是头部特写,背景为立方体:

skin.jpg
尺寸为256x256


你知道为什么身体没有得到和立方体一样的纹理吗?谢谢

问题在于紫外线。感谢@alex的提及,感谢@Tamlyn发布并回答了如何生成它们。我使用的代码在中

看起来是这样的:

function assignUVs(geometry) {

    geometry.faceVertexUvs[0] = [];

    geometry.faces.forEach(function(face) {

        var components = ['x', 'y', 'z'].sort(function(a, b) {
            return Math.abs(face.normal[a]) > Math.abs(face.normal[b]);
        });

        var v1 = geometry.vertices[face.a];
        var v2 = geometry.vertices[face.b];
        var v3 = geometry.vertices[face.c];

        geometry.faceVertexUvs[0].push([
            new THREE.Vector2(v1[components[0]], v1[components[1]]),
            new THREE.Vector2(v2[components[0]], v2[components[1]]),
            new THREE.Vector2(v3[components[0]], v3[components[1]])
        ]);

    });

    geometry.uvsNeedUpdate = true;
}

身体模型有紫外线贴图吗?@alex没有,我想是的?我期待着某种自动平铺