我想在OpenGL中获得像素颜色或绘制对象。例如,如果我在上下文中绘制一个圆,它将被保存并在对象类中绘制。它将具有宽度和高度。如果我点击圆圈,它应该返回颜色。但是......如果我点击对象的角落,它应该返回alpha 0让我知道我已经点击了圆形对象,但是在对象的透明区域。我是否需要绘制像素缓冲区对象?
void Circle::Display()
{
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, circle_vectors);
glColorPointer(4, GL_FLOAT, 0, circle_colors);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY); // enables the color-array.
glDisable(GL_BLEND);
glPopMatrix();
}
bool Circle::IsTransparent(int x, int y)
{
//We clicked on the circle object. Is the pixel transparent?
}
答案 0 :(得分:1)
我会首先将一般形式用于任何简单的几何形状。圆形,正方形,三角形等...你可以通过一些简单的数学找到一个点是否在所有这些范围内。因此,如果可能的话,继承您的Shape类以加快对简单形状的测试。
对于任意形状或具有异常变换特征的形状,可能需要进行像素回读或遮挡查询。