如何确定网格的哪些顶点对相机可见?

时间:2017-05-27 17:07:28

标签: three.js

我有一个THREE.Points对象代表3D模型的点云。 ~10,000个顶点。我希望能够“隐藏”相机不“可见”的点(因此,如果正常渲染对象时不会显示的顶点不应该渲染为点)。

是否有一种计算上廉价的方法来找到“面对”相机的顶点?

1 个答案:

答案 0 :(得分:1)

编辑: (完全误解了最初提出的问题)

您可以使用点或面的法线来确定它们是正面还是背面。这将起作用,除非相机面对的点通常会被靠近相机的脸遮挡。在这种情况下,需要对面部进行z排序。

原始回答: (留待参考)

有趣的问题是你为什么要这样做?它们无论如何都不可见,为什么要明确隐藏它们?

这是以最快的方式在GPU固定功能管道中实现的(如果你很好奇:它是在所有坐标已经转换为规范视图体积时在顶点着色器之后发生的剪裁)。你无法(或应该)在javascript中做任何事情来获得更多的表现。

如果您想手动控制可见性,这意味着在每个点上运行一些过程,随时更新几何体。完成之后,需要再次将几何图形上载到GPU,这是另一个性能损失。

但我不知道你的用例,也许你有正当理由这样做。在这种情况下,请参见此处:Manual frustrum culling with three.js