问题标签 [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.
graphics - 贝塞尔剪裁
我正在尝试找到/制作一种算法来计算两个任意填充的 2D 对象的交集(一个新的填充对象)。对象使用直线或三次贝塞尔曲线定义,并且可能有孔或自相交。我知道一些现有的算法对多边形做同样的事情,这里列出。但是,我想支持贝塞尔曲线而不将它们细分为多边形,并且在没有交叉点的区域中,输出应该具有与输入大致相同的控制点。
这是一个交互式程序来做一些 CSG,但剪辑不需要是实时的。我已经搜索了一段时间,但没有找到好的起点。
floating-point - POVray:如何可靠地创建仅接触表面的对象的漂亮合并?
我在做什么
我有一个场景,它通过算法绘制一个prism
具有六边形横截面的 a 和围绕中心一个的 n 层这样的棱镜,这样所有的棱镜一起形成一个更大的六边形形状。
现在,每一排棱镜与下一排棱镜的位移是 sqrt(3)/2 的倍数(因为一个棱镜的尺寸是 <1,sqrt(3)>,因为 sin(120/2°) = sqrt(3 )/2)。
我想,与棱镜尺寸相关的结果位置的浮点值并不总是以在物体之间产生零间隙的方式完全一致。因此,当我将整个东西包裹在 a 中merge
并为其分配透明的玻璃材料时,我不会得到平滑、统一的形状。根据 n 的值,我会在合并对象内部的边缘或某些表面的阴影处或两者兼而有之处得到抖动的怪异。
这是我的代码开头的注释块中的一个片段,它解释了 ASCII 艺术中的场景:
整个代码太长,无法在此处粘贴,但可在此处找到。读起来可能也很痛苦,因为我是个糟糕的编码员,而且 POVray 没有#for
循环。
我的问题
- 在合并仅接触表面但不重叠的数学定位对象时,如何考虑浮点值的不可预测性和不精确性?
- 这甚至应该按照我在 POVray 中想要的方式工作吗?
- 我在这里做一些非常愚蠢的事情吗?
c - 使用 CSG 树进行射线投射
我正在做一个项目,我必须在其中执行光线投射并使用 CSG 树。但我不知道如何使用 CSG 树或为这个项目实施它。我可以进行光线投射并给出最终答案。我的问题实际上是如何实现树并链接它。
three.js - 在通过 CSG.js 进程后将纹理添加到 three.js 形状
我同时使用 three.js 和 CSG.js 来制作一个新的形状。
不是最好的代码——最重要的几行是
我正在尝试将纹理添加到已转换为 CSG 的切割形状,然后返回到三个。每次我这样做时,我都会从 three.js 中得到一个随机错误。我厌倦了将 MeshBasicMaterial 更改为“MeshPhongMaterial”和“MeshLambertMaterial”,仍然是同样的错误。
所以我的问题是,我做错了什么还是不可能?
javascript - 用three.js和CSG设置位置
当我使用它作为一个立方体和一个球体的代码时,它会切掉这个立方体的某些部分:
我现在如何设置立方体的位置?我需要像 cube.CSG.position.set 这样的东西还是 CSG 库有一个特殊的方法可以使用?
谢谢!
three.js - 如何在 Three.js 中构造一个空心圆柱体
我在 Three.js 中构建空心圆柱体时遇到了困难。
我应该使用 CSG 还是通过将顶点缝合在一起来构建它?
geometry - 两个剖面的交点
我正在尝试找到一种算法来使用两个(或更多)剖面切割 3D 对象。仅应在两个剖面都被切割的地方切割对象。因此,考虑以下由两个剖面相交的 abcd 矩形:s0 和 s1;s1 向右切,s0 向顶部切。我想要的是得到最终的 ajikcd 形状。
这是一个非常简单的例子,但我希望它能清楚地说明我想要完成的工作。此外,这应该在 3D 中完成。
有谁知道这样做的任何库,或这样做的算法?这似乎是一个重要的问题,一定有人在我之前解决了!:)
我必须补充一点,我知道如何做基础知识(平面与面/平面/边缘的相交)。我看不到是否有一种聪明的方法来解决所有可能的情况(在这个情况下,必须添加两个面,但在其他一些情况下可能只创建一个面,等等),或者你是否应该处理它们分别地。
我应该补充的另一件事是我不关心渲染部分,我知道如何使用带有剪裁平面的 OpenGL 来做到这一点。我想要的是能够计算对象的新拓扑。
three.js - 如何删除 CubeGeometry 的一部分?
目前我正在使用 ThreeCSG/CSG 从一个更大的立方体中减去一个小立方体。这很好用,但只是它的外观不会改变实际的几何形状。因此,当在另一个立方体上使用 PhysiJS(物理引擎)时,它不会掉进洞里,而是像往常一样。点击演示。
有什么办法可以真正从 CubeGeometry 中删除一个部分,以便对象可以落入其中 - 不仅仅是为了显示目的?谢谢!