Javascript 三个JS,为纹理添加镜面反射(光泽)
我在three.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
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
});
}
完全替换材料