Как создать конструктивную твердую геометрию в 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)
Я столько часов пытался выполнить простую логическую операцию, но не понял.
Я хочу что-то вроде этого:
3 ответа
Решение
Трафаретный буфер OpenGL работает с двумерной пиксельной сеткой кадрового буфера. Сам OpenGL не имеет понятия об объектах или сцене. Это просто рисование точек, линий и треугольников. Таким образом, настоящая CSG невозможна только с OpenGL. Однако есть методы, которые эмулируют CSG с помощью операций буфера трафарета, но они довольно сложны. Google для "OpenGL CSG в буфере трафарета", чтобы найти некоторые документы с середины 1990-х годов по этому вопросу.
Попробуйте библиотеку sgCore - http://www.geometros.com/sgcore/review.htm Очень надежная и мощная библиотека