Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.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

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 通过着色器材质访问变形目标_Javascript_Three.js_Morphing - Fatal编程技术网

Javascript 通过着色器材质访问变形目标

Javascript 通过着色器材质访问变形目标,javascript,three.js,morphing,Javascript,Three.js,Morphing,我在中使用它并加载了一个带有变形目标的人体对象 但是我在通过web应用程序访问它时遇到了一个问题,因为它使用ShaderMaterial。尽管ShaderMaterial具有morphTarget属性,morphTarget:true不工作 这是我的密码 <body> <div id="info"> </div> <script src="js/three.js"></script> <scri

我在中使用它并加载了一个带有变形目标的人体对象

但是我在通过web应用程序访问它时遇到了一个问题,因为它使用
ShaderMaterial
。尽管
ShaderMaterial
具有
morphTarget
属性,
morphTarget:true不工作

这是我的密码

<body>
    <div id="info">

    </div>

    <script src="js/three.js"></script>
    <script src="js/ShaderSkin.js"></script>
    <script src="js/CopyShader.js"></script>
    <script src="js/EffectComposer.js"></script>
    <script src="js/RenderPass.js"></script>
    <script src="js/ShaderPass.js"></script>
    <script src="js/MaskPass.js"></script>
    <script src="js/Detector.js"></script>
    <script src="js/stats.min.js"></script>
    <script src="js/AssimpJSONLoader.js"></script>
    <script src="js/dat.gui.min.js"></script>
    <script src="js/OrbitControls.js"></script>

    <script>

        if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

        var statsEnabled = true;
        var container, stats, loader;
        var camera, scene, renderer;
        var mesh, mesh2, gui;
        var directionalLight;
        var mouseX = 0;
        var mouseY = 0;
        var targetX = 0, targetY = 0;
        var character,object;
        var windowHalfX = window.innerWidth / 2;
        var windowHalfY = window.innerHeight / 2;
        var mapColor, mapHeight, mapSpecular;
        var firstPass = true;
        var composer, composerBeckmann;
        var controls;

        init();
        animate();

        function init() {

            container = document.createElement( 'div' );
            document.body.appendChild( container );

            //
            camera = new THREE.PerspectiveCamera( 27, window.innerWidth / window.innerHeight, 1, 10000 );
            camera.position.z = 600;
            camera.position.y = -20;

            scene = new THREE.Scene();
            scene.background = new THREE.Color( 0xffffff );

            // LIGHTS
            scene.add( new THREE.AmbientLight( 0x333344 ) );

            directionalLight = new THREE.DirectionalLight( 0xffffff, 1 );
            directionalLight.position.set( 500, 0, 500 );

            directionalLight.castShadow = true;

            directionalLight.shadow.mapSize.width = 2048;
            directionalLight.shadow.mapSize.height = 2048;

            directionalLight.shadow.camera.near = 200;
            directionalLight.shadow.camera.far = 1500;

            directionalLight.shadow.camera.left = -500;
            directionalLight.shadow.camera.right = 500;
            directionalLight.shadow.camera.top = 500;
            directionalLight.shadow.camera.bottom = -500;

            directionalLight.shadow.bias = -0.005;

            scene.add( directionalLight );

            //access morph targets
            gui = new dat.GUI();

            var params = {  
                Height: 0       
            };

            var folder = gui.addFolder( 'Morph Targets' );
            folder.add( params, 'Height', 0.0, 1.0 ).step( 0.01 ).onChange( function( value ) { object.morphTargetInfluences[ 1 ] = value; } );
            folder.open();

            // load the object
            loader = new THREE.JSONLoader();
            loader.load( 'leeperrysmith/MorphMan1.json', function ( geometry ) {
            object = new THREE.Mesh( geometry );
            createScene( geometry , 120)

            } );

            //
            renderer = new THREE.WebGLRenderer( { antialias: true } );
            renderer.setPixelRatio( window.devicePixelRatio );
            renderer.setSize( window.innerWidth, window.innerHeight );
            container.appendChild( renderer.domElement );

            renderer.shadowMap.enabled = true;
            renderer.shadowMap.renderReverseSided = false;

            renderer.autoClear = false;

            //
            renderer.gammaInput = true;
            renderer.gammaOutput = true;

            //
            if ( statsEnabled ) {
                stats = new Stats();
                container.appendChild( stats.dom );
            }

            // COMPOSER
            renderer.autoClear = false;

            // BECKMANN
            var effectBeckmann = new THREE.ShaderPass( THREE.ShaderSkin[ "beckmann" ] );
            var effectCopy = new THREE.ShaderPass( THREE.CopyShader );

            effectCopy.renderToScreen = true;

            var pars = { minFilter: THREE.LinearFilter, magFilter: THREE.LinearFilter, format: THREE.RGBFormat, stencilBuffer: false };
            var rtwidth = 512, rtheight = 512;

            composerBeckmann = new THREE.EffectComposer( renderer, new THREE.WebGLRenderTarget( rtwidth, rtheight, pars ) );
            composerBeckmann.addPass( effectBeckmann );
            composerBeckmann.addPass( effectCopy );

            // EVENTS
            //document.addEventListener( 'mousemove', onDocumentMouseMove, true);
            window.addEventListener( 'resize', onWindowResize, true );


            controls = new THREE.OrbitControls( camera, renderer.domElement );
            controls.addEventListener( 'change', render ); // remove when using animation loop
            controls.enableZoom = true;
        }

        function createScene( geometry, scale ) {

            var textureLoader = new THREE.TextureLoader();

            // bump Map
            var mapHeight = textureLoader.load( "leeperrysmith/3d_skin_texture_bump_map_by_degrahuma_stock.jpg" );

            mapHeight.anisotropy = 4;
            mapHeight.wrapS = mapHeight.wrapT = THREE.RepeatWrapping;
            mapHeight.format = THREE.RGBFormat;


            var mapSpecular = textureLoader.load( "leeperrysmith/3d_skin_texture_bump_map_by_degrahuma_stock.jpg" );

            mapSpecular.anisotropy = 4;
            mapSpecular.wrapS = mapSpecular.wrapT = THREE.RepeatWrapping;
            mapSpecular.format = THREE.RGBFormat;

            // skin texture
            var mapColor = textureLoader.load( "leeperrysmith/middleage_lightskinned_male_diffuse2.png" );

            mapColor.anisotropy = 4;
            mapColor.wrapS = mapColor.wrapT = THREE.RepeatWrapping;
            mapColor.format = THREE.RGBFormat;

            var shader = THREE.ShaderSkin[ "skinSimple" ];

            var fragmentShader = shader.fragmentShader;
            var vertexShader = shader.vertexShader;

            var uniforms = THREE.UniformsUtils.clone( shader.uniforms );

            uniforms[ "enableBump" ].value = true;
            uniforms[ "enableSpecular" ].value = true;

            uniforms[ "tBeckmann" ].value = composerBeckmann.renderTarget1.texture;
            uniforms[ "tDiffuse" ].value = mapColor;

            uniforms[ "bumpMap" ].value = mapHeight;
            uniforms[ "specularMap" ].value = mapSpecular;

            uniforms[ "diffuse" ].value.setHex( 0xffffff );
            uniforms[ "specular" ].value.setHex( 0xffffff );
            //uniforms[ "specular" ].value.setHex( 0xa0a0a0 );

            uniforms[ "uRoughness" ].value = 0.2;
            uniforms[ "uSpecularBrightness" ].value = 1;

            // change the bump scale 
            uniforms[ "bumpScale" ].value = 0.5;

            var material = new THREE.ShaderMaterial( { 

            fragmentShader: fragmentShader, 
            vertexShader: vertexShader, 
            uniforms: uniforms, 
            lights: true,  
            morphTargets: true,
            //morphNormals: true,
            } );

            material.extensions.derivatives = true;

            mesh = new THREE.Mesh( geometry, material);

            mesh.position.y = - 50;
            mesh.scale.set( scale, scale, scale );

            mesh.castShadow = true;
            mesh.receiveShadow = true;

            scene.add( mesh);//, mesh2 );
        }

        //
        function onWindowResize( event ) {

            windowHalfX = window.innerWidth / 2;
            windowHalfY = window.innerHeight / 2;

            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();

            renderer.setSize( window.innerWidth, window.innerHeight );

        }

        function onDocumentMouseMove( event ) {

            mouseX = ( event.clientX - windowHalfX ) * 1;
            mouseY = ( event.clientY - windowHalfY ) * 1;

        }

        //
        function animate() {

            requestAnimationFrame( animate );
            controls.update(); 
            render();
            if ( statsEnabled ) stats.update();

        }

        function render() {

            targetX = mouseX * .001;
            targetY = mouseY * .001;

            if ( mesh ) {

                mesh.rotation.y += 0.05 * ( targetX - mesh.rotation.y );
                mesh.rotation.x += 0.05 * ( targetY - mesh.rotation.x );

            }

            if ( firstPass ) {

                composerBeckmann.render();
                firstPass = false;

            }

            renderer.clear();
            renderer.render( scene, camera );

        }

    </script>

</body>

如果(!Detector.webgl)Detector.addGetWebGLMessage();
var statsEnabled=true;
var容器、stats、loader;
摄像机、场景、渲染器;
var-mesh,mesh2,gui;
方向光;
var-mouseX=0;
var-mouseY=0;
var targetX=0,targetY=0;
var特征、对象;
var windowHalfX=window.innerWidth/2;
var windowHalfY=window.innerHeight/2;
var mapColor、mapHeight、mapSpecular;
var firstPass=true;
作曲家,作曲家贝克曼;
风险值控制;
init();
制作动画();
函数init(){
container=document.createElement('div');
文件.正文.附件(容器);
//
摄像头=新的三个透视摄像头(27,window.innerWidth/window.innerHeight,11000);
摄像机位置z=600;
摄像机位置y=-20;
场景=新的三个。场景();
scene.background=新的三种颜色(0xffffff);
//灯光
添加(新的3.AmbientLight(0x333344));
方向光=新的三个方向光(0xffffff,1);
方向灯。位置。设置(500,0500);
directionalLight.castShadow=真;
directionalLight.shadow.mapSize.width=2048;
directionalLight.shadow.mapSize.height=2048;
directionalLight.shadow.camera.near=200;
directionalLight.shadow.camera.far=1500;
directionalLight.shadow.camera.left=-500;
directionalLight.shadow.camera.right=500;
directionalLight.shadow.camera.top=500;
directionalLight.shadow.camera.bottom=-500;
方向光.shadow.bias=-0.005;
场景。添加(方向光);
//访问变形目标
gui=新的dat.gui();
var params={
身高:0
};
var folder=gui.addFolder('Morph Targets');
add(参数'Height',0.0,1.0).step(0.01).onChange(函数(值){object.morphTargetInfluences[1]=value;});
folder.open();
//加载对象
loader=new THREE.JSONLoader();
load('leeperrysmith/morpman1.json',函数(几何体){
对象=新的三个网格(几何体);
创建场景(几何体,120)
} );
//
renderer=new THREE.WebGLRenderer({antialas:true});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(window.innerWidth、window.innerHeight);
container.appendChild(renderer.doElement);
renderer.shadowMap.enabled=true;
renderer.shadowMap.renderReverseSided=false;
renderer.autoClear=false;
//
renderer.gammaInput=true;
renderer.gammaOutput=true;
//
如果(StatEnabled){
统计数据=新统计数据();
container.appendChild(stats.dom);
}
//作曲家
renderer.autoClear=false;
//贝克曼
var effectBeckmann=new THREE.ShaderPass(THREE.ShaderSkin[“beckmann”]);
var effectCopy=new THREE.ShaderPass(THREE.CopyShader);
effectCopy.renderToScreen=true;
var pars={minFilter:THREE.LinearFilter,magFilter:THREE.LinearFilter,format:THREE.RGBFormat,stencilBuffer:false};
var rtwidth=512,rtheight=512;
Composer Beckmann=new THREE.EffectComposer(渲染器,new THREE.WebGLRenderTarget(rtwidth,rtheight,PAR));
作曲家贝克曼·艾德帕斯(贝克曼);
作曲家Beckmann.addPass(有效副本);
//事件
//document.addEventListener('mousemove',onDocumentMouseMove,true);
addEventListener('resize',onWindowResize,true);
控件=新的三个.轨道控件(摄影机、渲染器.doElement);
controls.addEventListener('change',render);//使用动画循环时删除
controls.enableZoom=true;
}
函数createScene(几何体、比例){
var textureLoader=new THREE.textureLoader();
//凹凸贴图
var mapHeight=textureLoader.load(“leeperrysmith/3d_skin_texture_bump_map_by_degrahuma_stock.jpg”);
mapHeight.1=4;
mapHeight.wrapps=mapHeight.wrapT=THREE.RepeatWrapping;
mapHeight.format=THREE.RGBFormat;
var mapSpecular=textureLoader.load(“leeperrysmith/3d_skin_texture_bump_map_by_degrahuma_stock.jpg”);
mapSpecular.各向异性=4;
mapSpecular.wrapps=mapSpecular.wrapT=THREE.RepeatWrapping;
mapSpecular.format=THREE.RGBFormat;
//皮肤纹理
var mapColor=textureLoader.load(“leeperrysmith/middleage\u lightskined\u male\u diffuse2.png”);
mapColor.各向异性=4;
mapColor.wrapps=mapColor.wrapT=THREE.RepeatWrapping;
mapColor.format=THREE.RGBFormat;
var shader=THREE.ShaderSkin[“skinSimple”];
var fragmentShader=shader.fragmentShader;
var vertexShader=shader.vertexShader;
var uniforms=THREE.UniformsUtils.clone(shader.uniforms);
制服[