【问题标题】:How to determine which vertices of a mesh are visible to camera?如何确定网格的哪些顶点对相机可见?
【发布时间】:2017-10-28 09:49:44
【问题描述】:

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

是否有一种计算成本低廉的方法来查找“面向”相机的顶点?

【问题讨论】:

    标签: three.js


    【解决方案1】:

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

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

    原始答案: (留在这里供参考)

    有趣的问题是您为什么要这样做?反正它们是不可见的,为什么要显式隐藏它们呢?

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

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

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

    【讨论】:

    • 我正在用粒子构建一个 3D 模型。每个粒子都位于加载的 3D 模型的顶点。所有的点都是可见的。理想情况下,我想隐藏那些如果模型是实心的,你就看不到的。这是一种风格选择。
    • 对不起,我完全误解了你。在这些点上是否有可用的表面法线?在这种情况下,您可以进行简单的正面/背面计算。
    • 我使用垂直法线进行计算。效果很好。使用 Raycasting 对这些顶点进行一些后期处理,以清除我不想要的任何其他顶点。谢谢指点。
    • 根据此编辑问题和答案。感谢您的澄清,很高兴它成功了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2011-06-03
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多