我有以下声明:
glBegin( GL_QUADS );
glColor3f(0.0f,0.7f,0.7f);
glVertex2f(x1,y1);
glVertex2f(x2,y2);
glVertex2f(x3,y3);
glVertex2f(x4,y4);
glEnd();
问题是:如果我应用旋转,让我们说,20度,我怎么知道这些顶点在哪里? 因为稍后我需要能够点击广场并确定我点击的地方是否确实在广场内。
答案 0 :(得分:2)
虽然我希望在这个千年里没有人使用它,但实际上有一种机制可以在传统OpenGL中获得转换顶点。它被称为"反馈模式"。详细解释它超出了答案的范围。但是如果你想看看它是如何工作的,你可以在Red Book的免费在线版本中阅读它。
"点击并标识"你在问题中谈到的通常被称为" pick"或"选择"。有很多方法可以实现它,选择的方法在某种程度上取决于您的应用程序。为了让您快速了解一些常见方法:
选择模式。这几乎与反馈模式一样过时。它已经老了,但我觉得它至少更常用,所以它可能有更好的支持。不过,我不建议在新代码中使用它。同样,如果您想了解它,可以在Red Book中找到解释。
Modern OpenGL有一个名为Transform Feedback的功能。虽然它的主要目的不同,但它可以用来回读与传统反馈模式类似的变换顶点。
将场景绘制到屏幕外缓冲区,每个对象以不同颜色渲染。然后在选择位置读回颜色,并将其映射到对象。这是一种相当优雅和高效的方法,如果它适合您的要求,可以推荐。
在CPU上执行自己代码中的计算。更有效的方法通常是将逆变换应用于拾取点(实际上变为光线),并将其与几何体相交,而不是变换所有对象。