Latar belakang transparan dengan three.js

113

Kode berfungsi, tetapi saya mengalami masalah dalam menyetel latar belakang transparan ke kanvas dengan three.js. Saya menggunakan:

Background.renderer.setClearColor(0xffffff, 0);

Tapi kemudian background menjadi hitam. Bagaimana cara mengubahnya menjadi transparan?


Kode:

   var camera, scene, renderer;
   var mouseX = 0, mouseY = 0;
   var p;

   var windowHalfX = site.Width / 2;
   var windowHalfY = site.Height / 2;

   Background.camera = new THREE.PerspectiveCamera( 35, site.Width / site.Height, 1, 2000 );
   Background.camera.position.z = 300;
   //camera.position.y = 200;

   // scene
   Background.scene = new THREE.Scene();

   // texture
   var manager = new THREE.LoadingManager();
   manager.onProgress = function ( item, loaded, total ) {
      console.log('webgl, twice??');
      //console.log( item, loaded, total );
   };


   // particles
   var p_geom = new THREE.Geometry();
   var p_material = new THREE.ParticleBasicMaterial({
      color: 0xFFFFFF,
      size: 1
   });

   // model
   var loader = new THREE.OBJLoader( manager );
   loader.load( site.base_url + '/assets/models/head.obj', function ( object ) {

      object.traverse( function ( child ) {

         if ( child instanceof THREE.Mesh ) {

            // child.material.map = texture;

            var scale = 6;

            $(child.geometry.vertices).each(function() {
               p_geom.vertices.push(new THREE.Vector3(this.x * scale, this.y * scale, this.z * scale));
            })
         }
      });

      Background.scene.add(p)
   });

   p = new THREE.ParticleSystem(
      p_geom,
      p_material
   );

   Background.renderer = new THREE.WebGLRenderer();
   Background.renderer.setSize( site.Width, site.Height );
   Background.renderer.setClearColor(0xffffff, 0);

   $('.particlehead').append(Background.renderer.domElement);
   $('#content').on('mousemove', onDocumentMouseMove);
   site.window.on('resize', onWindowResize);

   function onWindowResize() {
      windowHalfX = site.Width / 2;
      windowHalfY = site.Height / 2;
      //console.log(windowHalfX);

      Background.camera.aspect = site.Width / site.Height;
      Background.camera.updateProjectionMatrix();

      Background.renderer.setSize( site.Width, site.Height );
   }

   function onDocumentMouseMove( event ) {
      mouseX = ( event.clientX - windowHalfX ) / 2;
      mouseY = ( event.clientY - windowHalfY ) / 2;
      //console.log(mouseX)
   }

   Background.animate = function() { 

      //console.log('animate2');
      Background.ticker = TweenMax.ticker;
      Background.ticker.addEventListener("tick", Background.animate);

      render();
   }

   function render() {
      Background.camera.position.x += ( (mouseX * .5) - Background.camera.position.x ) * .05;
      Background.camera.position.y += ( -(mouseY * .5) - Background.camera.position.y ) * .05;

      Background.camera.lookAt( Background.scene.position );

      Background.renderer.render( Background.scene, Background.camera );
   }

   render();
Robert Bue
sumber

Jawaban:

232

Jika Anda menginginkan latar belakang transparan di three.js, Anda perlu meneruskan alphaparameter ke WebGLRendererkonstruktor.

var renderer = new THREE.WebGLRenderer( { alpha: true } );

Anda dapat membiarkan warna bening pada nilai default.

renderer.setClearColor( 0x000000, 0 ); // the default

three.js r.71

WestLangley
sumber
@ WestLangley Haruskah kita melihat penurunan kinerja saat menggunakan teknik ini? Apakah itu terlihat?
tfrascaroli
1
@tfrascaroli Apakah Anda melihatnya?
WestLangley
Saya memposting komentar sebelum mencoba. Sekarang setelah saya mencobanya, tidak terlihat seperti itu, tetapi geometri yang saya render sangat kecil. Saya bertanya karena saya berencana menggunakan ini dalam proyek yang lebih besar. Bagaimanapun, sepertinya tidak berdampak, atau setidaknya tidak relevan dalam proyek saya.
tfrascaroli
2
ini disebut solisi. "cukup tempel baris kode ini". Tidak menemukan sesuatu yang mudah seperti ini sering di three.js. terima kasih bro
messerbill
@ WestLangley bagaimana cara mengatur gambar latar belakang dengan efek shader? VolumetericLightShader stackoverflow.com/questions/46864037/…
garis bawah