我正在尝试找到/制作一个算法来计算两个任意填充的2D对象的交集(一个新的填充对象).使用线或立方贝塞尔定义对象,并且可以具有孔或自相交.我知道几个现有的算法对多边形做了同样的事情,在这里列出.但是,我想支持beziers而不将它们细分为多边形,并且输出应该与没有交叉点的区域中的输入具有大致相同的控制点.
这是一个交互式程序来做一些CSG,但剪辑不需要是实时的.我已经搜索了一段时间,但没有找到好的起点.
我有很多视图试图拉伸然后相交以创建最终的多边形。问题是结果不是预期的,它有一些浮动的额外部分。我需要以某种方式纠正这个问题,即使解决方案是一种检测这些浮动额外部分并擦除它们的方法。
我正在使用这个库https://www.npmjs.com/package/ Three-csg-ts/v/3.1.10 来进行交集的二进制运算。
我不知道这是一个错误还是我做错了什么。我已经尝试了很多不同的拉伸设置配置,但仍然遇到同样的问题。
我对 js 或 ThreeJS 没有太多经验,所以如果我的代码可读性不好,我很抱歉,我已经尽力了。
import './style.css'
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
import { CSG } from 'three-csg-ts'
// Canvas
const canvas = document.querySelector('canvas.webgl')
/**
* Sizes
*/
const sizes = {
width: 1677,
height: 1287
}
// Scene
const scene = new THREE.Scene()
// View Points
const view_1 = [1019, 516, 1005, 502, 968, 481, 944, 482, 911, 492, 902, 505, 892, 510, 879, 522, 880, …Run Code Online (Sandbox Code Playgroud) 我已经为现代OpenGL版本重新实现了OpenCSG.
PixelFormatAttributes:
NSOpenGLPFAColorSize , 24 ,
NSOpenGLPFAAlphaSize , 8 ,
NSOpenGLPFADepthSize , 32 ,
NSOpenGLPFAStencilSize , 8 ,
NSOpenGLPFAAccelerated ,
NSOpenGLPFADoubleBuffer ,
NSOpenGLPFASupersample ,
NSOpenGLPFASampleBuffers, 1 ,
NSOpenGLPFASamples , 4 ,
Run Code Online (Sandbox Code Playgroud)
FBO规格:( 尝试使用多重采样渲染到FBO,但线条越来越强大且可见,请查看底部的屏幕截图)
- 创建功率为2的纹理,GL_RGBA(尝试过GL_RGBA8和GL_RGBA32F)
- GL_DEPTH24_STENCIL8(尝试过GL_DEPTH32_STENCIL8,没有结果)
简单算法Goldfeather:
while (i < depth complexity) {
take channel for render
merge layers if no free channel
render each layer with stencil func, mask and depth params to channel (FBO)
}
merge layers (taking texture from FBO and render objects again …Run Code Online (Sandbox Code Playgroud) 我正在使用JavaFX的JCSG库.
我有一些MeshView对象,我想将它们转换为CSG对象,有没有办法实现这一目标?
Processing是一个创新的编码平台-语言,IDE和生态系统-由Processing社区在Processing Foundation https://processing.org的支持下维护。处理Java模式通常可以从Java库中的代码中受益。
JCSG是基于BSP的CSG(构造实体几何)的Java实现https://github.com/miho/JCSG。