在已启用的GL_SCISSOR_TEST中是否有任何方法可以使用glEnable GL_SCISSOR_TEST?如下所示:
GL11.glEnable(GL11.GL_SCISSOR_TEST);
GL11.glScissor(0, 0, 64, 64);
draw.rect();
GL11.glEnable(GL11.GL_SCISSOR_TEST);
GL11.glScissor(32, 32, 48, 48);
draw.smallRect();
GL11.glDisable(GL11.GL_SCISSOR_TEST);
GL11.glDisable(GL11.GL_SCISSOR_TEST);
我已经尝试了上述内容,它似乎没有按预期工作,甚至通过查看代码看起来非常不合逻辑,但我无法想到解决这个问题的方法。
答案 0 :(得分:2)
OpenGL状态变量没有嵌套。这与做
基本相同bool scissor_test_enabled;
scissor_test_enabled = true;
...
scissor_test_enabled = true;
...
scissor_test_enabled = true;
剪刀测试无法帮助您解决问题。您应该看一下模板测试:使用模板缓冲区可以绘制任意形状,禁用颜色和深度写入,写入模板缓冲区(必须像深度缓冲区一样请求获取模板缓冲区)。然后启用模板测试并绘制常规几何图形,并启用颜色和深度写入。
答案 1 :(得分:0)
我不建议使用过时的功能,但为了完整性:在传统的OpenGL(兼容性配置文件)中,您可以使用属性堆栈来保存/恢复剪刀状态:
GL11.glEnable(GL11.GL_SCISSOR_TEST);
GL11.glScissor(0, 0, 64, 64);
draw.rect();
GL11.glPushAttrib(GL11.GL_SCISSOR_BIT);
GL11.glScissor(32, 32, 48, 48);
draw.smallRect();
GL11.glPopAttrib();
GL11.glDisable(GL11.GL_SCISSOR_TEST);
第二个glScissor()
调用仍将只替换上一个剪刀矩形。它不会形成一个交叉点,或类似的东西。它只允许您在使用较小的剪刀矩形后轻松恢复上一个剪刀矩形。只要第二个矩形包含在第一个矩形中,这应该可以为您提供预期的行为,就像您的示例中的情况一样。
使用当前的OpenGL,您应该记住代码中的剪刀矩形,并在需要更改它们时随时显式设置值。
答案 2 :(得分:0)
Body只是一个带整数的矩形。
我还没有测试过,但你可以理解。
然而,这门课并不意味着要剪刀。
您可以像这样使用它:
db.ProbCancer.find( { "cases.level" : -1 } )