2017-06-15 1 views
0

J'utilise THREE.js et activer la toile alpha: (parce que je dois construire mon WebGL au-dessus de quelque chose d'autre)Désactivation WebGL gl.BLEND ne fonctionne pas

this.renderer = new THREE.WebGLRenderer({ canvas: this.canvas, antialias: false, alpha: true }); 

Je mets la couleur claire comme ceci:

this.renderer.setClearColor(0xffffff, 0.0); 

Dans chaque cadre:

_render() { 
    renderer.clear(); 
    gl.disable(gl.BLEND); 
    // ... something else doesn't need to be blended, whose alpha value is not 1.0 
} 

Je suis curieux de savoir pourquoi quelque chose d'autre se encore mélangé avec le blanc arrière-plan même si je désactive gl.BLEND.

Répondre

0

trois.js contrôle le mélange. Lorsque vous appelez le renderer.render, il définit l'appel de fusion gl.enable(gl.BLEND) pour chaque matériau, selon que ce matériau doit être mélangé ou non. En plus de cela, même avec un fondu, vous pouvez dessiner avec un alpha non 1.0 qui finira par utiliser une toile qui peut voir à l'arrière-plan.

+0

Je définis tous les matériaux sur 'transparent = false' et' blending = THREE.NoBlending' mais les objets sont toujours mélangés avec le fond blanc. Quelle pourrait être la raison possible? –

+0

Que votre rendu avec un alpha non-0 comme il est dit dans la réponse. Que ce soit votre réglage ou l'ajout de shader à trois.js signifie simplement comment les nouveaux pixels se confondent avec les anciens. Avec elle, les nouveaux pixels désactivés sont écrits directement. Donc si vous le lecteur (0,0,0,0) vous deviendrez transparent. Et si vous affichez (0.5, 0, 0, .5) vous obtiendrez 50% de rouge transparent, etc. – gman

+0

Ce que vous essayez de faire n'est pas clair. Vous avez effacé à (0xFFFFFF, 0) qui est un fond transparent donc bien sûr vous allez voir à travers la toile partout où vous n'avez pas rendu. Partout où vous avez rendu, vous devez vous assurer de rendre avec une couleur unie. Le mélange n'a rien à voir avec ça. La fusion n'affecte que les pixels rendus par WebGL dans le canevas avec d'autres pixels dans le canevas. Le mélange de la toile avec son arrière-plan se passe dans le navigateur comme n'importe quel autre élément HTML. BTW: 0xFFFFFF, 0 est [une couleur non valide] (https://stackoverflow.com/a/36643558/128511) – gman