繁体   English   中英

如何隐藏伸出其他(复杂)3D对象背面的3D对象部分?

[英]How to hide parts of 3D objects that stick out of the back of other (complex) 3D objects?

我正在使用Three.js(an骨)渲染复杂的3D网格。 然后,我将一些简单的球体与此网格一起渲染,以标记表面上的某些点(肌肉将附着的位置):

骨头的前面;标记应该在这里可见骨头背面标记在此处不可见

问题是,某些区域的网格很薄,标记会从背面伸出。

假设标记坐标始终比背面更靠近网格的正面,并且球体始终在网格的正面比背面显示更多的表面积/体积:

我如何隐藏不突出手动突出特定标记的部分?

编辑:这是我可能的一种(幼稚的)方法。 我想要有关该想法的可行性的反馈,并希望获得(一些写作提示)实际代码:

  • 对于每个标记球:
    • 查找与球体相交的网格的所有面
    • 计算这些面的所有面向外的法线向量(顶点法线或面法线?)
    • 计算从脸部中心到球体中心的所有距离
    • 将所有这些法线向量相加,并乘以它们各自的距离
    • 给定(归一化?)结果向量,隐藏指向该方向的半球

我不确定如何对任何这些步骤进行编码。 我也不确定这是否是明智的选择。

绘制半球而不是完整的球。 使用phiStartphiLength的参数SphereGeometry构造。

球体的中心仍将位于骨骼表面(顶点)上。

一个球体的方向将由球体原点中计算出的normal给出。

Three.js已经计算出网格的法线,以确定光线如何从网格反射。 您可以使用VertexNormalsHelper来显示网格的法线:

var bone = ...; // bone mesh
var scene = ...; //your THREE.Scene
scene.add(new THREE.VertexNormalsHelper(bone));

可在此处找到VertexNormalsHelper的源代码: VertexNormalsHelper

您必须计算法线向量和oZ轴之间的角度差,以便获得difXdifY 这些是必须在XY方向上旋转球体以使其垂直于骨骼局部表面的量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM