如何将事件附加到在gtk绘图区域中使用OpenGL绘制的立方体?

时间:2012-01-26 10:12:34

标签: opengl gtk

我在gtk绘图区域小部件中使用OpenGL绘制一个立方体。现在我想将“clicked”等事件附加到多维数据集,以便可以选择拖放等。 我该怎么办?

1 个答案:

答案 0 :(得分:5)

OpenGL不是一个场景图(* gah *我已经累了,再次写这个,再一次,再次)。它绘制事物。你在3D空间给它一堆三角形,它将它们投射到2D,根据你的愿望绘制它们,然后忘记它。

在绘制完立方体之后,OpenGL中不再有任何可以将其识别为连贯结构的东西。这完全取决于你的部分。

你要做的是:

  • 维护您绘制的场景的表示
  • 在GTK GL区域安装鼠标事件处理程序
  • 使用鼠标事件将指针坐标转换回场景坐标。基本上你将“拍摄”光线进入场景并测试它们击中的位置。幸运的是,测试光线 - 立方体交叉点是微不足道的。你可以通过使用射线边界球测试首先测试光线是否接近,来加快速度。

要关注的关键字是“OpenGL对象选择”


  

以便可以选择拖放

顺便说一句:你不能只是在OpenGL中拖动“对象”,因为它不知道几何结构意义上的“对象”。 OpenGL指定对象,但这些对象实际上是抽象的数据源,如顶点和索引数据的纹理或缓冲区。什么都不会成为一个可操纵的场景。

如果您在场景中更改某些内容,使用OpenGL则必须完全重绘