0

OpenGL でピクセル カラーまたは描画オブジェクトを取得したいと考えています。たとえば、コンテキストに円を描画すると、オブジェクト クラスに保持されて描画されます。幅と高さになります。円をクリックすると、色が返されます。しかし...オブジェクトの角に向かってクリックすると、アルファ0が返されて、円オブジェクトをクリックしたことを通知する必要がありますが、オブジェクトの透明な領域にあります。Pixel Buffer オブジェクトに描画する必要がありますか?

ここに画像の説明を入力

 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 に答える