Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将着色器添加到从OBJMTLLoader加载的THREE.Object3D_Javascript_Three.js_Webgl_Shader - Fatal编程技术网

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 );