【问题标题】:How to get the vertices of a three.js model on a specific height?如何在特定高度上获取 three.js 模型的顶点?
【发布时间】:2014-05-18 09:47:51
【问题描述】:

我有一个对象的 three.js 模型。现在我对不同高度的轮廓感兴趣(角点以及曲线上的一些点来确定曲率)。目前,我们将模型转换为 CSG 库(csg.js)中的对象,将其与特定高度上的一个小平面框(因为无法以某种方式仅使用平面)相交,然后创建图像并使用 OpenCV findContours () 来取回我们感兴趣的点。

模型越大,切片越多,这个过程就越慢,所以我想知道你们是否知道解决这个问题的更好方法。也许我只是在文档中监督了一些对我有帮助的东西,但到目前为止我找不到任何看起来对我有帮助的东西。

根据对象的不同,轮廓可能是凸凹的,因此解决方案需要在该部分是通用的。

我非常感谢任何可能对我有帮助的输入或指针。

【问题讨论】:

    标签: javascript 3d three.js


    【解决方案1】:

    使用着色器材质。在制服中,设置

    myUniforms = {
        uClipPlane:   { type: "v4", value: new THREE.Vector4( 0.0, 0.0, -1.0, -300.0) }, 
        clipOffset:  { type: "f", value: 1.0 },
    }
    

    clipPlane 定义了一个平面,您将在其中剪切对象。 clipOffset 定义了裁剪过程的容差。

    在顶点着色器中,设置

    vec4 pos4 = modelViewMatrix * vec4( position, 1.0 ); 
    vClip = dot ( uClipPlane, pos4); 
    

    在片段着色器中,设置

    if (vClip < 0 || vClip > clipOffset ) discard;
    

    您需要一个 clipOffset 的原因与您在处理过程中需要一个盒子的原因相同,您形状中的点永远不会在一个精确的平面上,而是在平面的一小段距离内。

    【讨论】:

    • 这只会给我模型中在该高度上定义的点,还是例如穿过平面的垂直边缘上的点?而且这些点是无序的,对吧?那么就没有简单的方法来检测哪些点的顺序会在特定高度上创建图形的轮廓?
    • 这将为您提供与当前完全相同的功能,但速度更快。 (或者至少我是这么认为的)。它将为您提供渲染模型中的点,来自顶点、边和面。不,你没有得到顶点信息。
    • 这很不幸,因为我至少需要除点之外的轮廓信息。我猜想在没有任何顶点信息的情况下创建它是不可能的,因为它是模棱两可的。如果我不需要这些信息,你的答案会很棒。很抱歉没有正确指定对轮廓信息的需求,而不仅仅是问题中的点。
    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多