问题标签 [csg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6617 浏览

three.js - 三个 CSG 的 3D 布尔运算

按照此处的示例:

http://learningthreejs.com/blog/2011/12/10/constructive-solid-geometry-with-csg-js/

并将 Three.js 与https://github.com/chandlerprall/ThreeCSG结合使用,我正在尝试对模型中的节点进行 3D 布尔运算。例如,如果我有一堵带窗户的墙,我想在上面做invert()只是得到窗户。

我有一个函数可以返回节点多边形的所有顶点,这是一个没有孔的对象的顶点示例https://pastebin.com/8dhYzPwE

我正在像这样使用 ThreeCSG:

但这就是我要进入的geometryCsg

我认为这是因为geometry.faces.length0

如何使顶点数组正确Three.Geometry,以使面不会为空?Geometry.elementsNeedsUpdate不起作用...

有没有使用形状的多边形作为 Vector3s 数组并将其转换为 csg 的示例?

0 投票
0 回答
66 浏览

3d - 具有 ThreeCSG 的 3D 形状的 Inverse()

我正在尝试使用ThreeCSG反转 3D 形状(获取原始形状的空白),但看起来它们没有包含原始 CSG的反函数:

我尝试像这里的其他功能一样自行实现它:

但它不起作用。我还尝试制作一个大的THREE.BoxGeometry并从中减去(实现减去)我的形状,但我只取回没有任何孔或形状的大盒子。

关于如何实现反转的任何想法?

0 投票
1 回答
1142 浏览

javascript - Three.js 2D CSG - 相交、联合、相减

我将 csg.js 与 three.js 一起使用,它似乎只支持 3D CSG。检查 这个

我想相交和联合 2D (three.js) 几何。有什么办法可以用 three.js 做 2D CSG 吗?

0 投票
1 回答
475 浏览

3d - threeJS / threeCSG - 在使用 EdgesGeometry 时,在 threeCSG 布尔函数之后共面的杂散边

我正在使用 EdgesGeometry 来显示网格的外边缘:EdgesGeometry(geometry, thresholdAngle)。

这通常可以按预期工作,但是在使用threeCSG“减去”或“联合”然后在生成的网格上生成EdgesGeometry之后,即使我将“thresholdAngle”增加到“180”,我也会在共面面上出现各种杂散边缘度”,它们仍然存在。

这就是发生的事情 - 在此处输入图像描述

这是我的代码:(a & b 是盒子几何的网格)

有人有什么想法吗?谢谢

更新

下面是'WireframeGeometry'的样子...... 在此处输入图像描述

0 投票
1 回答
1293 浏览

three.js - 关于如何在墙上创建窗口的建议

我正在开发一个three.js 应用程序,我必须在其中创建一个建筑结构(全部位于底层),高度、宽度、长度将由用户指定。用户可以更改墙壁和屋顶的颜色(使用纹理应用,因为我有每种颜色的图像和一些纹理)。他们还可以在选定的墙壁(如窗户或门)上添加任何配件,然后可以将其拖放到同一选定的墙壁上。在决定了他们想要放置窗口的位置(例如)之后,他们将单击一个按钮来确认位置。现在我必须在墙上创建一个窗口,以便我可以看到房间的内部。请提出您对以下方法的看法:

一旦用户确认了门的位置——

a.) 我可以在主建筑网格中添加窗户的网格mainMesh.add(windowMesh);。但问题是即使我将透明材质设置为窗口,墙壁材质仍然显示。

b.) 我可以从主建筑网格中减去窗网格(使用 CSG,threeCSG)buildingmeshcsg.subtract(windowmeshcsg),这会在建筑网格中创建一个孔,然后我将窗网格放在那个孔上。现在的问题是在任何 CSG 操作之后,原始几何体的面都混在一起了,所以在 csg 操作之后,面的颜色和 UV 消失了。

c.)我可以在小部分中创建墙, 分段墙 例如从一个角落到窗户角落,然后从另一个窗户角落到另一个墙角。但这会弄乱我在墙壁上应用的纹理,因为我已经为前后墙壁创建了 UV,因为纹理没有正确应用。

请提出您的看法。

必须做这样的事情:https ://forum.unity.com/threads/make-a-seethrough-window-without-making-hole-in-the-wall.286393/

0 投票
1 回答
1286 浏览

javascript - 使用threeBSP方法后,创建的球体不光滑

图片

我正在尝试更改球体的分段数,但如果我达到了 45 的限制,我将无法削减它,并且没有其他方法可以使球体更平滑一点。

0 投票
1 回答
507 浏览

javascript - 有没有办法在Javascript中做动态CSG?

我对 Javascript 和编码非常陌生。我使用 Three.js 制作一个有玻璃杯的场景,其中液体根据事件(鼠标移动、点击...)移动。我想到了构造实体几何来实现这一点,如下图所示,来自 3D 建模程序:

玻璃场景 减去液体

只有立方体会移动位置和旋转,使液体看起来像填充玻璃并产生“波浪”。我尝试使用 CSG.js 和 Three.js,但是这个过程似乎成本太高,无法在每一帧都实现,而且渲染一点也不流畅。

所以我的问题是,有没有办法用 javascript 进行这种客户端操作?另一个可能有帮助的 API?您认为使用verb.js 对NURBS 建模,从结果中减去然后制作网格会更便宜吗?或者也许我错了,这绝对是太昂贵了,我应该忘记这个想法?或者更确切地说在我的场景中导入动画?

欢迎任何线索!

0 投票
0 回答
286 浏览

c++ - Carve CSG c++ 的问题。结果中包含错误的顶点

您好,我对 Carve 有疑问,但我不确定它是否与实施或我的使用有关。

这是显示我遇到的问题的孤立代码。本质上我得到了错误的结果,或者更具体地说,我在结果中得到了一个不正确的顶点vertex_storage。该顶点也包含在面索引中,因此 carve 似乎具有。我已经手动调试并绘制了所有的面,所以确定不应该包括这个顶点。

包含的不应该被突出显示的顶点。

在此处输入图像描述

生成的网格显然是错误的。更详细地检查它,其中包含一个错误点vertex_storage,即 (150,150,0)。

由此生成的结果三角形包括错误的顶点 o.0

这是一个非常基本的差异操作,我读过 carve 有一些问题,但我没想到它会像 2 个基本网格(2 个长方体)那样表现,这让我认为这是我做错的事情。

这也令人沮丧,因为在调试第 6 面(网格集 0)时(我假设某些东西是种子/prng),我得到相同的顶点,但几乎总是不同的顺序。

这是证明问题的来源......

相关输出

在面顶点的相关输出中。不应包含 veretx (150,150,0),但正如您所见,它包含在 3 个面中......(面 6、10 和 11)。这会导致不正确的细分。

这里发生了什么?是我使用雕刻的方式,还是雕刻本身的问题。任何帮助,将不胜感激 :)

0 投票
1 回答
907 浏览

wpf - 如何使用 HelixToolkit 或 3D WPF 从另一个模型中减去一个 Model3D 对象?

我正在使用 HelixToolkit.Wpf 库为我的应用程序创建一些图形。我知道 Helix 提供了一个 CuttingPlanesGroup,让您能够创建像这样的图像: https ://imgur.com/0NUorOF

但是,我遇到的问题是,CuttingPlanesGroup 是一个 ModelVisual3D 对象,我不能使用它,因为我已经将控件的内容设置为另一个 ModelVisual3D。

那么,有没有一种方法,无论是使用 Helix 还是使用通用 3D WPF,都可以从另一个 3D 形状中减去一个 3D 形状?这样,我可以制作一个圆柱体和一个 3D 矩形,然后从另一个中减去一个。

0 投票
1 回答
182 浏览

javascript - 在 Three.js 中控制自定义几何图形的缩放

我有一个自定义对象,它是两个网格的减法。这种减法创建了一个类似框架的对象。

现在,只要大小发生变化,我就会动态地缩放这个框架。问题是.scale只使用让我的对象拉伸,而我希望它保持框架的宽度(在这种情况下为 4)。

是否可以指定对象应该如何缩放(比如编写我自己的缩放函数实现)或者是否有一个属性/方法可以使用它会导致保留“空白”与“对象”部分?先感谢您。