【问题标题】:Instance geometry Frustum culling实例几何截锥体剔除
【发布时间】:2018-06-26 00:07:57
【问题描述】:

我遇到了截锥体剔除问题。 我们知道 Three.js 中的截锥体剔除是默认的,如果需要我们可以设置

mesh.frustumCulled =false;

我的问题是如何在实例几何中实现截锥剔除, 如果我启用

mesh.frustumCulled = true

从场景中剔除的所有实例数据,而原始实例从截锥体中剔除, 因为我的原始几何图形位于一个位置,所以实例将由矩阵(位置、旋转、比例)放置。 我使用了 InstanceBufferGeometry 和 InterleavedBufferAttribute,如 three.js 示例中所述 webgl_interactive_instances_gpu

提前谢谢..

【问题讨论】:

    标签: three.js


    【解决方案1】:

    实例化发生在 gpu 上; cpu 上的截锥体剔除。

    如果您使用实例化,您可以为您的网格禁用平截头体剔除

    mesh.frustumCulled = false;
    

    或者您可以手动指定边界球

    mesh.geometry.boundingSphere = new THREE.Sphere( new THREE.Vector3(), radius );
    

    如果需要更新绑定球体,

    mesh.geometry.boundingSphere.center.set( x, y, z );
    mesh.geometry.boundingSphere.radius = radius;
    

    three.js r.93

    【讨论】:

    • 谢谢@WestLangley,没错,正如你所说,我们可以手动设置边界球体,如果所有实例数据从截头体中出来,它就会被剪裁,但我需要剪裁一个实例数据如果它从截锥体中出来
    • 实例化是不可能的。限制渲染实例数量的唯一方法是设置mesh.geometry.maxInstancedCount = numInstances
    • 谢谢@westLankley。现在我只使用 maxInstanceCount,是否有可能在 [1,2,3...10] 中显示 10 个实例中的 5 个,我需要同样显示 [1,5,6,8,9]。
    • 是的,但这是一个与平截头体剔除无关的问题:将实例位置设置为远离相机,或添加实例可见性属性并切换它。
    • 感谢@WestLangley,说得好,我确实设置了一个标志属性来切换可见性,并在片段着色器中使用以丢弃。
    猜你喜欢
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    相关资源
    最近更新 更多