0

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

1 回答 1

1

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

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

于 2013-08-30T22:31:21.803 回答