Как создать конструктивную твердую геометрию в OpenGL / C++

Я хочу трафарет некоторых объектов с openGL.

glClear(GL_STENCIL_BUFFER_BIT);
glColorMask(false, false, false, false);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_EQUAL, 0, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glDisable(GL_DEPTH_TEST);
glColor4f(0,0,1,1.0f);

gl::draw(mVBO); //a sphere

glEnable(GL_DEPTH_TEST);
glColorMask(true, true, true, true);
glStencilFunc(GL_ALWAYS,0, 1);
glStencilOp(GL_REPLACE,GL_KEEP, GL_ZERO);

mTexture.enableAndBind();
gl::drawCube(Vec3f(0,3,0),Vec3f(13,13,13) );

glDisable(GL_STENCIL_TEST)

Я столько часов пытался выполнить простую логическую операцию, но не понял.

Я хочу что-то вроде этого:

https://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Boolean_difference.PNG/275px-Boolean_difference.PNG

3 ответа

Решение

Я бы рекомендовал не изобретать велосипед.

Трафаретный буфер OpenGL работает с двумерной пиксельной сеткой кадрового буфера. Сам OpenGL не имеет понятия об объектах или сцене. Это просто рисование точек, линий и треугольников. Таким образом, настоящая CSG невозможна только с OpenGL. Однако есть методы, которые эмулируют CSG с помощью операций буфера трафарета, но они довольно сложны. Google для "OpenGL CSG в буфере трафарета", чтобы найти некоторые документы с середины 1990-х годов по этому вопросу.

Попробуйте библиотеку sgCore - http://www.geometros.com/sgcore/review.htm Очень надежная и мощная библиотека

Другие вопросы по тегам