gpt4 book ai didi

opengl - 如何在 OpenGL 中用圆圈剪辑

转载 作者:行者123 更新时间:2023-12-05 00:35:26 26 4
gpt4 key购买 nike

我想知道是否可以模拟在OpenGL中通过 key 孔看的效果。

我已经绘制了我的 3D 场景,但我想让除了中心圆之外的所有东西都变成黑色。

我尝试了这个解决方案,但它的做法与我想要的完全相反:

// here i draw my 3D scene 

// Begin 2D orthographic mode
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();

GLint viewport [4];
glGetIntegerv(GL_VIEWPORT, viewport);

gluOrtho2D(0, viewport[2], viewport[3], 0);

glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

// Here I draw a circle in the center of the screen
float radius=50;
glBegin(GL_TRIANGLE_FAN);
glVertex2f(x, y);
for( int n = 0; n <= 100; ++n )
{
float const t = 2*M_PI*(float)n/(float)100;
glVertex2f(x + sin(t)*r, y + cos(t)*r);
}
glEnd();

// end orthographic 2D mode
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();

我得到的是在中心画的一个圆圈,但我想获得它的互补...

最佳答案

与 OpenGL 中的其他所有内容一样,有几种方法可以做到这一点。这是我头顶上的两个。

使用圆形纹理: (受到推崇的)

  • 绘制场景。
  • 切换到正交投影,并使用中心有一个白色圆圈的纹理在整个屏幕上绘制一个四边形。使用适当的混合函数:
    glEnable(GL_BLEND);
    glBlendFunc(GL_ZERO, GL_SRC_COLOR);
    /* Draw a full-screen quad with a white circle at the center */

  • 或者,您可以使用像素着色器生成圆形。

    使用模板测试: (不推荐,但如果您没有纹理或着色器可能会更容易)
  • 清除模板缓冲区,并在其中绘制圆圈。
    glEnable(GL_STENCIL_TEST);
    glStencilFunc(GL_ALWAYS, 1, 1);
    glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
    /* draw circle */
  • 为场景的其余部分启用模板测试。
    glEnable(GL_STENCIL_TEST)
    glStencilFunc(GL_EQUAL, 1, 1);
    glStencileOp(GL_KEEP, GL_KEEP, GL_KEEP);
    /* Draw the scene */

  • 脚注:我建议避免在代码中的任何点使用立即模式,而是使用数组。这将提高代码的兼容性、可维护性、可读性和性能——在所有领域都是胜利。

    关于opengl - 如何在 OpenGL 中用圆圈剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9374622/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com