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 Three.js MeshPhongMaterial不';t似乎不受非环境光的影响_Javascript_Three.js_Webgl - Fatal编程技术网

Javascript Three.js MeshPhongMaterial不';t似乎不受非环境光的影响

Javascript Three.js MeshPhongMaterial不';t似乎不受非环境光的影响,javascript,three.js,webgl,Javascript,Three.js,Webgl,我有一个函数,它将一对数组绘制为双面曲面。我已经使用threejs几个星期了,但从来没有使用过自定义形状,所以我认为这可能与问题有关。我没有找到任何有帮助的网络答案,尽管我尝试了很多,所以我在这里 我有这两段相关的代码,但JSFIDLE拥有全部内容 var ambient = new THREE.AmbientLight( 0x444444 ); scene.add( ambient ); var spotLight = new THREE.DirectionalLight( 0xffffff

我有一个函数,它将一对数组绘制为双面曲面。我已经使用threejs几个星期了,但从来没有使用过自定义形状,所以我认为这可能与问题有关。我没有找到任何有帮助的网络答案,尽管我尝试了很多,所以我在这里

我有这两段相关的代码,但JSFIDLE拥有全部内容

var ambient = new THREE.AmbientLight( 0x444444 );
scene.add( ambient );

var spotLight = new THREE.DirectionalLight( 0xffffff );
spotLight.position.set( 0, 1, 1 ).normalize();
scene.add(spotLight);

function graph(array1, array2)
{

    var particleCount = array1.length*array2.length,
        particles = new THREE.Geometry(),
        pMaterial = new THREE.MeshPhongMaterial({
            side: THREE.DoubleSide,
            shading: THREE.SmoothShading
        });

    // now create the individual particles
    for (var p = 0; p < particleCount; p++) {


    var row = (p%array1.length),
        col = Math.floor(p/array1.length),
        pX = 2*row - array1.length,
        pY = 2*col - array2.length,
        pZ = (array1[row])*(array2[col]),
        particle = new THREE.Vector3(pX, pZ, pY);

    // add it to the geometry
    particles.vertices.push(particle);
    if (row != 0 && col != 0)
    {
        particles.faces.push( new THREE.Face3( col * array1.length + row, col * array1.length + row - 1, (col - 1) * array1.length + row) );
        particles.faces.push( new THREE.Face3( (col - 1) * array1.length + row, col * array1.length + row - 1, (col - 1) * array1.length + row - 1) );
    }
}

// create the particle system
var particleSystem = new THREE.Mesh(
    particles,
    pMaterial);

// add it to the scene
scene.add(particleSystem);

onRenderFcts.push(function(){
    var angle   = Date.now()/10000 * Math.PI;
    particleSystem.rotation.y   = angle;        
})
函数图(array1,array2)
{
var particleCount=array1.length*array2.length,
粒子=新的三个。几何体(),
p材质=新的3.0网格材质({
三面,双面,
明暗处理:三点明暗处理
});
//现在创建单个粒子
对于(var p=0;p
}


我想我对平行光不照亮表面的原因已经没有什么想法了。

生成顶点和面后,需要调用
计算面法线()

因此,只需添加
particles.computeFaceNormals()在图形函数的末尾