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();

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 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.