2017-04-04 17 views
0

Je suis curieux de connaître quelque chose sur le processus init et animer. Nous pouvons changer les choses comme les lumières et les ombres et j'ai remarqué que si j'utilise de grandes valeurs au point d'initialisation, les fps au départ sont en train de tomber comme des fous. J'ai donc testé avec du code dans le processus d'animation comment cela se passerait quand je définirais les valeurs pas à pas à chaque boucle. Je veux dire que c'est comme si c'était de toute façon. Le "programme" boucle tout le temps toutes choses dans notre scène.Three.js lights & shadows

Mais ce que je me suis demandé était « Est-il vraiment mieux pour une configuration de scène ?! »

Que dites-vous ?! Et savez-vous s'il y a une scène complexe là-bas où ça se passe comme ça et encore une fois sans mettre à jour les valeurs comme ça ?! Et je veux dire au démarrage, pas comme un jeu où nous rendons juste ce que nous voyons, pas ce qu'il y a sur toute la scène.

Je suis aussi curieux de voir comment vous pourriez/travailleriez ceci:

var cam, light, d, rend; 
var ambLone = 0x444444,  
    ambLoneI = 0.2,  
    ambLtwo = 0x666666, 
    ambLtwoI = 0.5,  
    lC = 0xdfebff,  
    lN = 2.75, 
    lF = 1000, 
    lightPx = 700, 
    lightPy = 500, 
    lightPz = 500, 
    lightSCmin = 1, 
    lightSCmax = 1000, 
    lightSCF = 100, 
    lightSCN = lightSCmin; 

dans init(); ->

scenes.add(new THREE.AmbientLight(ambLone, ambLoneI)); 
      scenes.add(new THREE.AmbientLight(ambLtwo, ambLtwoI)); 
      light = new THREE.DirectionalLight(lC, lN, lF); 
      light.position.set(lightPx, lightPy, lightPz); 
      light.position.multiplyScalar(1.3); 
      light.castShadow = true; 
      light.shadow.mapSize.width = 1024; 
      light.shadow.mapSize.height = 1024; 
      d = 1000; 
      light.shadow.camera.left = - d; 
      light.shadow.camera.right = d; 
      light.shadow.camera.top = d; 
      light.shadow.camera.bottom = - d; 
      light.shadow.camera.far = lightSCF; 
      light.shadow.camera.near = lightSCN; 
      var helper = new THREE.CameraHelper(light.shadow.camera); 

      scenes.add(light, helper); 

dans animate(); ->

requestAnimationFrame(animate); 

    if (lightSCF === lightSCmax) { 
     lightSCF = 1000; 
     light.shadow.mapSize.width = 5120; 
     light.shadow.mapSize.height = 5120; 
     console.log('Light is set to: ' + lightSCF + light.shadow.mapSize.width); 
    } else if(lightSCF < lightSCmax){ 
     lightSCF = lightSCF + 1; 
     light.shadow.mapSize.width = light.shadow.mapSize.width + 4.5; 
     light.shadow.mapSize.height = light.shadow.mapSize.width + 4.5; 
     light.shadow.camera.far = lightSCF; 
     light.shadow.camera.updateProjectionMatrix(); 
     console.log('Light is now: ' + lightSCF + ' ' + light.shadow.mapSize.width); 
    } else { 
     console.log('whatever... '); 
    } 

render(); 

Répondre