Object 从绘制的顶点获取(X,Y)像素颜色&;OPENGL中的颜色数组

Object 从绘制的顶点获取(X,Y)像素颜色&;OPENGL中的颜色数组,object,opengl,pixel,alpha,vertex,Object,Opengl,Pixel,Alpha,Vertex,我想在OpenGL中获得像素颜色或绘制对象。例如,如果我在上下文中绘制一个圆,它将被保存并绘制在对象类中。它将有一个宽度和高度。如果我点击圆圈,它会返回颜色。但是如果我朝着对象的角点单击,它应该返回alpha 0,让我知道我已单击圆形对象,但在对象的透明区域中。是否需要绘制到像素缓冲区对象 void Circle::Display() { glMatrixMode(GL_MODELVIEW); glPushMatrix(); glEnable(GL_B

我想在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?
 }


首先,我会使用任何简单几何形状的一般形式。圆、正方形、三角形等。。。通过一些简单的数学运算,你可以发现一个点是否在所有这些的范围内。因此,如果可能的话,可以对Shape类进行子类化,以加快针对简单形状的测试


对于任意形状或具有异常变换特征的形状,您可能需要执行像素读回或遮挡查询。

如果这是一个圆,为什么不使用常规表示法?你知道半径,只要测试一个点是否在距离圆心r单位内。根本不需要读取对象。你做过任意缩放吗?在仔细考虑之后,我认为你正在纹理映射这个圆到一个简单的四边形上?你想知道一个点是否位于四边形的圆区域内?只要您没有异常地转换quad,您应该仍然能够使用我上面提到的方法;)