Javascript 三个JS,为纹理添加镜面反射(光泽)

Javascript 三个JS,为纹理添加镜面反射(光泽),javascript,three.js,Javascript,Three.js,我在three.js中将纹理应用于一个对象。我想给它增加一些镜面反射或反光 我看到这样的例子 new THREE.MeshPhongMaterial( { color: 0x996633, specular: 0x050505, shininess: 100 } ); 但是,我的代码如下所示: // texture var texture = new THREE.Texture(); var imgLoader = new THREE.ImageLoader( ma

我在three.js中将纹理应用于一个对象。我想给它增加一些镜面反射或反光

我看到这样的例子

new THREE.MeshPhongMaterial( { 
    color: 0x996633, 
    specular: 0x050505,
    shininess: 100
} );
但是,我的代码如下所示:

// texture
var texture = new THREE.Texture();
var imgLoader = new THREE.ImageLoader( manager );
imgLoader.load( 'assets/uv.png', function ( image ) {
    texture.image = image;
    texture.needsUpdate = true;
} );

// model
var loader = new THREE.OBJLoader( manager );
loader.load( 'assets/obj.obj', function ( object ) {
    object.traverse( function ( child ) {
        if ( child instanceof THREE.Mesh ) {
            child.material.side = THREE.DoubleSide;
            child.material.map = texture;
        }
    } );
    object.position.y = - 95;
    scene.add( object );
}, onProgress, onError );

我不确定在哪里添加反光或镜面反射设置,因为我没有使用
THREE.MeshPhongMaterial
,或者如果我确实使用了
THREE.MeshPhongMaterial
,如何将其与
THREE.texture

组合,我建议您在加载对象时覆盖对象的材质

var loader = new THREE.OBJLoader(manager);
loader.load('assets/obj.obj', function (object) {
    object.traverse(function (child) {
        if (child instanceof THREE.Mesh) {
            child.material = new THREE.MeshPhongMaterial({
                color:     0x996633, 
                specular:  0x050505,
                shininess: 100,
                map:       texture,
                side:      THREE.DoubleSide
            });
        }
    } );
    object.position.y = - 95;
    scene.add(object);
}, onProgress, onError);

three.js提供了相当多的材质,它们的行为都不同,并且使用不同的属性进行配置(请参阅以获取概述)。如果你想得到一个光泽的外观,你可能会选择或。Ducodement还将告诉您可用于配置材质的属性

MeshStandardMaterial
类似于phong材质的更新版本。它是更“正确”(从物理上讲)和更昂贵的计算选项,而MeshPhongMaterial是一个很好的近似

您可能缺少的信息是,您可以随意替换材质,因此在您的示例中

if ( child instanceof THREE.Mesh ) {
    var oldMaterial = child.material;
    child.material = new THREE.MeshStandardMaterial({
        side: THREE.DoubleSide,
        map: texture
        // ..if neccesary, copy properties like color from oldMaterial
    });
}
完全替换材料