Three.js: 如何让 cssRenderer 层元素透明显示通过它的 webglRenderer 层?
Three.js: How do I get cssRenderer layer element to be transparent showing webglRenderer layer through it?
这是一个 cssRenderer 的测试 运行 一个直接在 webglRender 前面的场景,基本上 运行 在一起,伪造包含 html dom webgl 中的元素(div 和文本)。
我正在尝试使文本框背景(在 cssScene 中呈现)透明,以便您可以看到后面的地板(在 glscene 中呈现)。
cssObject
映射到 planeMesh
,planeMesh
的不透明度为零,material.blending = THREE.NoBlending;
在其上。事情是这样的,混合似乎没有效果,当我改变混合模式(完全不透明)时没有任何反应。当我在 cssObject
上尝试一些混合模式时也没有任何反应。
有趣的是,如果我旋转场景并从文本框的背面看,即使文本是向后的,文本框也是透明的。嗯...这是怎么回事?如何使文本框以正确的方式看穿文本? :D
这是相关的js:
function drawMesh(){
// create the plane mesh
//var material = new THREE.MeshBasicMaterial({ wireframe: false, color: 0xFF00FF });
var material = new THREE.MeshBasicMaterial();
material.color.set('black');
material.opacity = 0;
// material = THREE.DoubleSide;
material.blending = THREE.NoBlending;
var geometry = new THREE.PlaneGeometry(1.70,0.49);
planeMesh = new THREE.Mesh( geometry, material );
planeMesh.position.x = 2.5;
planeMesh.position.y = 1.8;
planeMesh.position.z = -2;
planeMesh.rotation.y = Math.PI / 1;
// add it to the WebGL scene
glscene.add(planeMesh);
var number = document.createElement( 'div' );
number.className = 'number';
number.textContent = "This is an html textbox and that is a cube. blah blah blah";
// create the object3d for this element
cssObject = new THREE.CSS3DObject( number );
// we reference the same position and rotation
cssObject.position = planeMesh.position;
cssObject.rotation = planeMesh.rotation;
cssObject.scale.set(0.0075,0.0075,0.0075);
cssObject.rotation.y = Math.PI / 1;
cssObject.position.x = 2.5;
cssObject.position.y = 1.8;
cssObject.position.z = -2;
cssObject.blending = THREE.AdditiveBlending;
console.log(cssObject.position.x);
// add it to the css scene
cssScene.add(cssObject);
}
MeshBasicMaterial
没有 opacity
参数。
您必须设置 material = new THREE.Material();
或者,您可以从场景中删除此 planeMesh
,并在 css 文件中为您的 cssObject
设置背景颜色。
这是一个 cssRenderer 的测试 运行 一个直接在 webglRender 前面的场景,基本上 运行 在一起,伪造包含 html dom webgl 中的元素(div 和文本)。
我正在尝试使文本框背景(在 cssScene 中呈现)透明,以便您可以看到后面的地板(在 glscene 中呈现)。
cssObject
映射到 planeMesh
,planeMesh
的不透明度为零,material.blending = THREE.NoBlending;
在其上。事情是这样的,混合似乎没有效果,当我改变混合模式(完全不透明)时没有任何反应。当我在 cssObject
上尝试一些混合模式时也没有任何反应。
有趣的是,如果我旋转场景并从文本框的背面看,即使文本是向后的,文本框也是透明的。嗯...这是怎么回事?如何使文本框以正确的方式看穿文本? :D
这是相关的js:
function drawMesh(){
// create the plane mesh
//var material = new THREE.MeshBasicMaterial({ wireframe: false, color: 0xFF00FF });
var material = new THREE.MeshBasicMaterial();
material.color.set('black');
material.opacity = 0;
// material = THREE.DoubleSide;
material.blending = THREE.NoBlending;
var geometry = new THREE.PlaneGeometry(1.70,0.49);
planeMesh = new THREE.Mesh( geometry, material );
planeMesh.position.x = 2.5;
planeMesh.position.y = 1.8;
planeMesh.position.z = -2;
planeMesh.rotation.y = Math.PI / 1;
// add it to the WebGL scene
glscene.add(planeMesh);
var number = document.createElement( 'div' );
number.className = 'number';
number.textContent = "This is an html textbox and that is a cube. blah blah blah";
// create the object3d for this element
cssObject = new THREE.CSS3DObject( number );
// we reference the same position and rotation
cssObject.position = planeMesh.position;
cssObject.rotation = planeMesh.rotation;
cssObject.scale.set(0.0075,0.0075,0.0075);
cssObject.rotation.y = Math.PI / 1;
cssObject.position.x = 2.5;
cssObject.position.y = 1.8;
cssObject.position.z = -2;
cssObject.blending = THREE.AdditiveBlending;
console.log(cssObject.position.x);
// add it to the css scene
cssScene.add(cssObject);
}
MeshBasicMaterial
没有 opacity
参数。
您必须设置 material = new THREE.Material();
或者,您可以从场景中删除此 planeMesh
,并在 css 文件中为您的 cssObject
设置背景颜色。