在OpenGL中,当我使用VAO绘制对象时如何通过名称堆栈选择对象?

问题描述

我正在处理一个使用固定渲染管道的旧大型项目,当前项目使用名称堆栈来选择一个对象。

现在我需要将项目中的一个对象更改为 VAO (glDrawElements...) 模式,而其他对象仍然由 glBegin/glEnd 绘制。结果,原来的拾取机制不能再拾取 VAO 对象了。

现在我想知道是否可以使用名称堆栈方法来选择一个 VAO 对象?如果没有,如何在不干扰其他物体渲染和选择的情况下选取它。

解决方法

我在 OpenGL 规范的兼容性配置文件中没有看到任何阻止选择在存在从缓冲区拉出的数组的情况下工作的内容。所以它应该可以正常工作。

显然,性能会受到影响。此外,渲染时间“太长”是因为您使用的是选择模式,而不是因为 glBegin/End 太慢。它们并不快,但选择模式会扼杀对性能的所有希望,无论您如何渲染。因此,使用缓冲区和 VAO 不会有帮助(而且可能会受到伤害)。

最好不要使用选择模式进行渲染。