ThreeJS:在另一个网格中时,网格变得不可见

里库浣熊

我试图弄几个小时,为什么我看不到多维数据集内的文本,也看不出为什么它不起作用。

有两个网格,其中一个在另一个内部,但不可见。

当我注释将立方体网格添加到组中的行时,将显示文本(第34行)。如果从材料中删除“ transparent:true”,则可以看到文本,但是会出现背景(第52行)。

文本作为画布纹理添加,这是我发现动态添加2d文本的最简单方法。

我只想在我的多维数据集内添加一些白色文本,而没有任何背景色。

我看到了这个问题,但看起来与我的问题无关:THREE.JS:在网格内部时看到几何

var renderer, scene, camera, cubeGroup;
var rotationX = 0;
var rotationY = 0;
var percentX, percentY;
var container = document.getElementById('container');

init();
animate();

function init(){
    renderer = new THREE.WebGLRenderer({alpha: true});
    renderer.setSize(window.innerWidth, window.innerHeight);
    renderer.setClearColor( 0x000000, 1);
    document.getElementById('container').appendChild(renderer.domElement);

    scene = new THREE.Scene();

    camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 10000);
    camera.position.set(0, 0, 1000);
    scene.add(camera);
    
    // group
    cubeGroup = new THREE.Group();
    
    // cube
    var geometry = new THREE.BoxGeometry(200, 200, 200);
    var material = new THREE.MeshPhongMaterial({ 
      color: 0x11111f, 
      side: THREE.DoubleSide, 
      opacity: .5,
      transparent: true 
    });
    var mesh = new THREE.Mesh(geometry, material);
    cubeGroup.add(mesh); // Comment this and the text appears with transparency
    
    var ambientLight = new THREE.AmbientLight(0x999999, 0.8);
    scene.add(ambientLight);
    
    // text
    var bitmap = document.createElement('canvas');
    var g = bitmap.getContext('2d');
    bitmap.width = 256;
    bitmap.height = 256;
    g.font = '80px Arial';
    g.fillStyle = 'white';
    g.fillText('text', 20, 80);
        
    var geometry = new THREE.PlaneGeometry(180, 180);
    var texture = new THREE.CanvasTexture(bitmap);
    var material = new THREE.MeshStandardMaterial({
        map: texture,
        transparent: true // Comment this and the text appears - but with background
    });
    
    var mesh2 = new THREE.Mesh(geometry, material);    
    cubeGroup.add(mesh2);
    
    // add group to scene
    scene.add(cubeGroup);
  
    window.addEventListener('resize', onWindowResize, false);
}


function onWindowResize() {

    windowHalfX = window.innerWidth / 2;
    windowHalfY = window.innerHeight / 2;

    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
  
    renderer.setSize(window.innerWidth, window.innerHeight);
    
}

function animate(now){
    requestAnimationFrame(animate);
  
    cubeGroup.rotation.y += (rotationX - cubeGroup.rotation.y) * 0.05;
    cubeGroup.rotation.x += (rotationY - cubeGroup.rotation.x) * 0.05;
        
    renderer.render(scene, camera);    
}

function findViewCoords(mouseEvent)
{
  var xpos;
  var ypos;
  var w = window.innerWidth;
  var h = window.innerHeight;
  var centerX = w/2;
  var centerY = h/2;

  if (mouseEvent)
  {
    xpos = mouseEvent.pageX - document.body.scrollLeft;
    ypos = mouseEvent.pageY - document.body.scrollTop;
  }
  else
  {
    xpos = window.event.x + 2;
    ypos = window.event.y + 2;
  }
  
  var diffX = xpos - centerX;
  var diffY = ypos - centerY;
  percentX = diffX / centerX;
  percentY = diffY / centerY;
 
  rotationX = percentX/2;
  rotationY = percentY/2; 
}

container.addEventListener("mousemove", findViewCoords);
body {
    margin: 0;
    padding: 0;
    overflow: hidden;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/84/three.js"></script>

<div id="container"></div>

炭疽

发生这种情况的原因是three.js中的渲染分两个阶段进行。

首先呈现固体物质,然后呈现透明物质。

透明物体按照它们与相机的距离排序。

因此,通过设置.transparent = true; 您正在使文本在第二遍过程中呈现,从而呈现在其他几何图形的顶部。

顽强的西兰利(West Langley)给出以下答案:

Threejs中的透明对象

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当其中心不在摄影机视线范围内时,ThreeJS网格变得不可见

另一个<div>中的一种形式变得不可点击

在一个JPanel绘制网格是不可见的完全

为什么扩展功能在另一个模块中不可见?

我的协议定义在另一个Swift文件中不可见

ProtoBuffer通过gradle生成的类在IntelliJ的另一个模块中不可见

更改图像时 UIButton 变得不可见

仅在chrome中缩放内容时,DIV变得不可见,但仍可单击

变量在另一个块中也可见

ThreeJS:剔除隐藏用户不可见的网格

图像不会变得不可见

WPF:当另一个增加时自动缩小网格中的对象

元素在重新加载时变得不可见,然后在调整大小时再次可见

当数据网格行在网格中不可见时,如何避免空引用异常?

分隔器可组合在放置在具有水平滚动修饰符设置的可组合内时变得不可见。这是一个错误吗?

网格视图重叠在 wpf 中的另一个网格视图上

来自另一个函数的变量不可见?

来自另一个页面的会话变量在子域上不可见

从另一个应用程序启动外部“不可见”应用程序

在另一个不可见的textview上的textview,请不要点击

当一个CSS网格区域为空时,将其扩展为另一个网格区域

材质柔性版式-小屏幕时,一个网格与另一个网格重叠

当其他网格仍然完好无损时,使一个引导网格堆叠到另一个

角度:从另一个组件传递的数据在页面重新加载时变得不确定

Android如果一个视图位于FrameLayout中另一个视图的顶部,并且是不可见的,它会拦截单击/触摸事件吗?

在 ThreeJS 中拼凑网格会导致可见的接缝

另一个CSS网格内的CSS网格显示为父网格

WPF:如何在单击按钮时淡入网格,并在单击另一个按钮时淡出网格?

从另一个类中的另一个线程更改视图可见性