c++ - 如何在 OpenGL/C++ 中创建构造实体几何

标签 c++ opengl boolean csg

我想用 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)

我尝试了很多小时来实现一个简单的 boolean 运算,但我不明白。

我想要这样的东西:

img

最佳答案

OpenGL 的模板缓冲区在帧缓冲区的二维像素网格上运行。 OpenGL 本身没有对象或场景的概念。它只是绘制点、线和三角形。因此,仅使用 OpenGL 不可能实现真正的 CSG。然而,有些技术可以通过模板缓冲区操作来模拟 CSG,但它们非常复杂。 Google 搜索“模板缓冲区中的 OpenGL CSG”以查找 1990 年代中期关于该主题的一些论文。

关于c++ - 如何在 OpenGL/C++ 中创建构造实体几何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9623510/

相关文章:

c++ - 如何仅给定相应的 id 来确定 GL 帧缓冲区对象的宽度和高度

c++ - vbo 显示相同的对象

mysql - 另一列中包含的 boolean 值列 - SQL

boolean - 为什么 Coq 中的逻辑连接词和 boolean 值是分开的?

c++ - 公开不透明 C 结构体中的字段

c++ - 如何索引和修改 OpenCV 矩阵

c++ - OpenGL:帧缓冲区,不完整的纹理附件

python - 如何在 python 中设置和检查 boolean 标志

c++ - 为什么结构体的 sizeof 不等于每个成员的 sizeof 之和?

另一个类中的 C++\Qt 类对象