webgl_shadowmap_receiveshadow.html 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <title>three.js webgl - shadow map - per-object receive shadow</title>
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
  7. <link type="text/css" rel="stylesheet" href="main.css">
  8. </head>
  9. <body>
  10. <script type="module">
  11. import * as THREE from '../build/three.module.js';
  12. var camera, scene, renderer;
  13. var caster;
  14. init();
  15. animate();
  16. function init() {
  17. camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 );
  18. camera.position.set(0, 200, 400);
  19. camera.lookAt( new THREE.Vector3(0, 0, 0) );
  20. scene = new THREE.Scene();
  21. var geometry = new THREE.BoxBufferGeometry( 100, 100, 100 );
  22. var material = new THREE.MeshPhysicalMaterial( { color: 0xff8800 } );
  23. caster = new THREE.Mesh( geometry, material );
  24. caster.castShadow = true;
  25. caster.receiveShadow = false;
  26. scene.add( caster );
  27. var ground = new THREE.Mesh( new THREE.PlaneBufferGeometry( 1000, 1000 ), material );
  28. scene.add( ground );
  29. ground.position.set(0, -80, 0);
  30. ground.rotation.x = - Math.PI / 2;
  31. ground.castShadow = false;
  32. ground.receiveShadow = true;
  33. var light = new THREE.PointLight();
  34. scene.add(light);
  35. light.position.set(0, 600, 0);
  36. light.castShadow = true;
  37. light.shadow.camera.far = 1000;
  38. // We use a high bias value mostly because that can reveal bugs in the implementation of caster.receiveShadow
  39. light.shadow.bias = 0.05;
  40. renderer = new THREE.WebGLRenderer( { antialias: true } );
  41. renderer.setPixelRatio( window.devicePixelRatio );
  42. renderer.setSize( window.innerWidth, window.innerHeight );
  43. renderer.shadowMap.enabled = true;
  44. document.body.appendChild( renderer.domElement );
  45. //
  46. window.addEventListener( 'resize', onWindowResize, false );
  47. }
  48. function onWindowResize() {
  49. camera.aspect = window.innerWidth / window.innerHeight;
  50. camera.updateProjectionMatrix();
  51. renderer.setSize( window.innerWidth, window.innerHeight );
  52. }
  53. function animate() {
  54. requestAnimationFrame( animate );
  55. caster.rotation.x += 0.005;
  56. caster.rotation.y += 0.01;
  57. renderer.render( scene, camera );
  58. }
  59. </script>
  60. </body>
  61. </html>
粤ICP备19079148号