Transparenter Hintergrund mit Three.js

Lesezeit: 3 Minuten

Transparenter Hintergrund mit Threejs
Robert Bue

Der Code funktioniert, aber ich habe ein Problem beim Festlegen eines transparenten Hintergrunds für die Leinwand mit Three.js. Ich benutze:

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

Aber dann wird der Hintergrund schwarz. Wie ändere ich es transparent?


Der Code:

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

Transparenter Hintergrund mit Threejs
WestLangley

Wenn Sie einen transparenten Hintergrund in Three.js wünschen, müssen Sie die alpha Parameter zum WebGLRenderer Konstrukteur.

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

Sie können die klare Farbe auf dem Standardwert belassen.

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

drei.js r.71

  • @WestLangley Sollten wir bei Verwendung dieser Technik einen Leistungsabfall feststellen? Ist es auffällig?

    – tfrascaroli

    12. Januar ’17 um 12:20

  • @tfrascaroli Hast du einen gesehen?

    – WestLangley

    12. Januar ’17 um 14:08

  • dies wird als solition bezeichnet. “Einfach diese Codezeile einfügen”. In Three.js ist etw nicht oft so leicht zu finden. Dank bro

    – Messerschnabel

    6. März ’17 um 18:54

  • Ab August 2020 ist diese Antwort veraltet und scheint nicht für die neuesten Versionen von Threejs zu gelten

    – Kirk Sefchik

    17. August ’20 um 17:27


  • @KirkSefchik Funktioniert bei mir mit Version 120. Vielleicht hatte Ihre Version einen Fehler?

    – Aggregat1166877

    24. November ’21 um 6:43


Sie müssen auch setzen: scene.background = null;

Three.js v124

  • Dies hat mir zusammen mit der abgestimmten Antwort geholfen, das gewünschte Ergebnis zu erzielen. Danke schön!

    – ggluta

    7. April ’21 um 14:24

  • Das funktioniert bei mir nicht (three.js r129).

    – BarryCap

    27. Juni ’21 um 19:05

1641923347 844 Transparenter Hintergrund mit Threejs
Alaa Sufi

Ein transparenter Hintergrund kann mit dem folgenden Code erreicht werden.

scene.background = transparent;

  • Das kann unmöglich richtig sein, oder? transparent bezieht sich nur auf einen Namen, der nicht existiert – Es ist im Grunde äquivalent zu scene.background = undefined;.

    – Will Chen

    16. Juni ’21 um 13:15

.

376330cookie-checkTransparenter Hintergrund mit Three.js

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy