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没有,我想是的?我期待着某种自动平铺