Javascript 如何将着色器添加到从OBJMTLLoader加载的THREE.Object3D
我有一个模型加载使用Javascript 如何将着色器添加到从OBJMTLLoader加载的THREE.Object3D,javascript,three.js,webgl,shader,Javascript,Three.js,Webgl,Shader,我有一个模型加载使用 我需要将顶点和片段着色器应用于此模型。如何执行此操作?您需要一个着色器材质来添加顶点和片段着色器 var material = new THREE.ShaderMaterial( { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: sh
我需要将顶点和片段着色器应用于此模型。如何执行此操作?您需要一个着色器材质来添加顶点和片段着色器
var material = new THREE.ShaderMaterial( {
fragmentShader: shader.fragmentShader,
vertexShader: shader.vertexShader,
uniforms: shader.uniforms
} ),
除了Gero3的答案外,这将确保内容中的所有网格都将获得正确的材质:
var material = new THREE.ShaderMaterial( {
uniforms: shader.uniforms,
fragmentShader: shader.fragmentShader,
vertexShader: shader.vertexShader
} );
var object = event.content;
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
child.material = material;
}
} );
scene.add( object );
我知道这一点。它适用于长方体或球体,但适用于模型,
event.content
没有材质,如果将着色器材质设置为该材质,则仍然没有任何更改。它有效!很高兴THREE.js的作者回答了这个问题=DHi@mrdoob它说着色器未定义
var material = new THREE.ShaderMaterial( {
uniforms: shader.uniforms,
fragmentShader: shader.fragmentShader,
vertexShader: shader.vertexShader
} );
var object = event.content;
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
child.material = material;
}
} );
scene.add( object );