我使用行进立方体渲染等值面(或者可能是行进的正方形,因为这是2D),我想做集合操作,如设置差异,交集和联合.我认为这很容易实现,只需在两个不同的隐式曲面中选择两个顶点标量,但事实并非如此.
对于我的初步测试,我尝试了两个球体圆圈,以及设置的操作差异.即A - B.一个圆圈正在移动而另一个圆圈是静止的.这是我在选择顶点标量时以及在将角顶点分类为内部或外部时尝试的方法.代码是用C++编写的.OpenGL用于渲染,但这并不重要.没有任何CSG操作的正常渲染确实给出了预期的结果.
void march(const vec2& cmin, //min x and y for the grid cell
const vec2& cmax, //max x and y for the grid cell
std::vector<vec2>& tri,
float iso,
float (*cmp1)(const vec2&), //distance from stationary circle
float (*cmp2)(const vec2&) //distance from moving circle
)
{
unsigned int squareindex = 0;
float scalar[4];
vec2 verts[8];
/* initial setup of the grid cell */
verts[0] = vec2(cmax.x, cmax.y);
verts[2] = vec2(cmin.x, cmax.y); …
Run Code Online (Sandbox Code Playgroud)