使用 OpenGL 旋转正方形后能否获取其顶点?

Can I obtain the vertices of a square after rotating it with OpenGL?

我有以下声明:

glBegin( GL_QUADS );
glColor3f(0.0f,0.7f,0.7f);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
glVertex2f(x4,y4);
glEnd();

问题是:如果我应用旋转,比方说,旋转 20 度,那么我怎么知道这些顶点在哪里? 因为稍后我需要能够点击广场并确定我点击的地方是否确实在广场内。

虽然我希望在这个千年里没有人使用过它,但实际上有一种机制可以在遗留 OpenGL 中获取转换后的顶点。它被称为 "feedback mode"。详细解释它超出了答案的范围。但是如果你想看看它是如何工作的,你可以在 Red Book.

的免费在线版本中阅读它。

你在问题中提到的"click and identify"通常被称为"picking"或"selection"。实现它的方法有很多种,选择哪种方法在某种程度上取决于您的应用程序。让您快速了解一些常用方法:

  • 选择模式。这几乎和反馈模式一样过时了。它一样古老,但我感觉它至少更常用,所以它可能有更好的支持。不过,我不建议在新代码中使用它。同样,如果您无论如何都想了解它,可以在 Red Book.

  • 中找到解释
  • 现代 OpenGL 具有称为变换反馈的功能。虽然其主要用途不同,但它可用于回读类似于传统反馈模式的变换顶点。

  • 将场景绘制到屏幕外缓冲区,每个对象都以不同的颜色呈现。然后读回选择位置的颜色,并将其映射到一个对象。这是一种相当优雅和高效的方法,如果它符合您的要求,可以推荐。

  • 在 CPU 上用您自己的代码执行计算。不是转换所有对象,更有效的方法通常是将逆变换应用于您的拾取点(实际上变成一条射线),并将其与几何体相交。