Three.js位置和可见性问题

问题描述:

目前,我正在尝试深入分组对象或更好的有序对象。然而,我对object3D和这些孩子的位置和知名度有一个奇怪的问题。Three.js位置和可见性问题

所以我有一组对象,光源是目前为止的主要对象,例如几个球体,它们是主对象的子对象。

问题是,位于另一个对象(同胞)(从相机视图)后面的子对象是可见的。所有孩子对象都出现在主对象的前面,而那些实际位于主对象后面的对象。

不幸的是我不能在codePen中重现这个,所以我不得不拍摄一些现场照片,很多道歉。

在图片中,相机围绕光源顺时针旋转(主要物体位于左侧)。

  1. enter image description here
  2. enter image description here
  3. enter image description here

所以基本上我在做什么是:

mObj = new THREE.Object3D(); 
mObj.add(new THREE.Mesh(someGeometry, someMaterial); 
cObj = new THREE.Object3D(); 
cObj.add(new THREE.Mesh(someGeometry, someMaterial); 
mObj.add(cObj); 
scene.add(mObj); 

那是关系到对象hierachic命令或其他什么东西?

第二个更微不足道的问题是,在我的一台电脑上,那些黑暗的物体(因为没有照明)的部分会产生那些奇怪的黑色/灰色的表情,我不能解释。也许Graphicscard /驱动程序或什么的?

+0

我也不能重现这样的行为:[jsfiddle](https://jsfiddle.net/prisoner849/fees9768/)。 “太阳”是主要对象,“行星”是它的孩子。 – prisoner849

+0

啊......我可以! ([的jsfiddle](https://jsfiddle.net/fees9768/5/))。我把所有的大小和距离乘以一个光年(以公里为单位)。并获得与所述相同的结果。谢谢! –

这些对象之间的距离是多少?这可能是一个浮点舍入问题。我已经碰到它了。

如果是这样,并且您获得闪烁的模型,则需要将相机和主动模型保留在原点处,并移动周围的宇宙以保持重要位置(靠近玩家)的精度, 。

+0

感谢您的提示。距离和尺寸太大,所以我必须找到一个新的规模,这将是非常棘手的。 –

+0

你可能会发现一个解决方案来处理Three.js中的非常大的浮点数(> 10^9)或非常小的浮点数(

+0

正如我所提到的,如果您将用户保留在原点并将宇宙移到他们周围,通常不是那么重要,反之亦然。 远离玩家的物体距离玩家超过10^9个单位,无论如何都会超出WebGL的可渲染范围。 创建新的WebGLRenderer时,您可以指定近距离和远距剪辑平面。将这些设置过大也会导致颤抖,因此最好采用这些限制,而不是试图强制硬件。 – Will