2011-10-18 26 views
0

我试图使用glSelectBuffer(GLsizei大小,GLuint *缓冲区)方法以稍微不同的方式选择对象,然后我相信在OpenGL 3.1的C++支持。如果我按照在线指定的方式执行所有操作,选择会很好。OpenGL选择缓冲区 - 使用指向对象的指针而不是未签名的Int?

而不是GLuint *,我想实际存储指针到我的图形对象本身在选择缓冲区。这将允许我根据包含指向该对象的指针的选择轻松发出信号。当GLuint的大小和指向我的对象(x86)的指针的大小一致时,似乎它可以正常工作,但似乎当它们不在时会中断(x64。)

我可以完成此操作与另一个步骤,但我宁愿不必排队选择ID - >对象指针,如果OpenGL将支持这种机制的选择与其他数据类型。

正在尝试使用OpenGL的选择机制吗? (最好在OpenGL 3.1中,但未来的版本也适用。)

我的问题是否有意义?我在我的解释中错过了什么吗?到目前为止,我试图让选择缓冲区花费很长时间而不是整数,并且我收到一个类型检查错误(如预期的那样)。另外,我没有看到glSelectBuffer()的任何重载方法,这让我觉得这种方法不可能。我查看了gl.h以查看typedef并更多地了解OpenGL的类型。我也看过堆栈溢出类似的问题 - 我很抱歉,如果同样的问题已被问及我错过了。

+2

如果'sizeof(GLuint *)> sizeof(GLuint)',我认为你将不得不使用散列表。 –

+0

@Minging Duck - 谢谢,如果我必须自己排列这些内容,散列将会是一条路,因为我怀疑DeadMG的有用评论有助于加强。 –

+0

或者你断言所有被指向的对象有一些hackery有16个字节对齐,并且断言你的内存地址都将小于16GB。 –

回答

4

优选地在OpenGL 3.1,但是未来的版本也是适用的

选择模式已经从OpenGL的3芯和更高版本中移除。 OpenGL是用于绘图的,而选择模式无论如何都会回到软件模式,即不是硬件加速。

只是我的建议:不要使用它。

+0

根据您的答案,在软件(光线/几何相交)中使用分析解决方案将会更清晰。对于我们的大部分几何体以及加速度数据结构,我们都缺乏交叉函数,因此对于大型几何体来说,处理交集足够快。这将需要主要的,主要的改变,同时添加辅助散列表来排列选择ID,而实际的对象指针不会。我可能暂时不接受这个问题,因为我认为哈希表可能是一个短期解决方案,远离OpenGL的选择可能是我们的长期解决方案。 –

+0

感谢您的建议。 –

+0

这是我们正在努力的长期解决方案。 在短期内,我们有一种方法来排列选择ID - >对象,类似于散列表建议。非常感谢你的想法和帮助。 –

相关问题