2013-08-30 3 views
0

OpenGL에서 픽셀 색상 또는 그려진 개체를 얻고 싶습니다. 예를 들어, 컨텍스트에 원을 그으면 오브젝트 클래스에 유지되고 그려집니다. 너비와 높이가 있습니다. 원을 클릭하면 색상이 반환됩니다. 그러나 ... 객체의 모퉁이를 클릭하면, circle 객체를 클릭했지만 객체의 투명한 영역에서 알 수 있도록 alpha 0을 반환해야합니다. Pixel Buffer Object에 그려야합니까?OPENGL의 그려진 정점 및 색상 배열에서 (X, Y) 픽셀 색상 가져 오기

enter image description here

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

이것이 원이면 일반 표현을 사용하지 않는 이유는 무엇입니까? 반경을 알고 있습니다. 점이 원의 중심에서 r- 단위 내에 있는지 테스트합니다. 객체를 전혀 읽을 필요가 없습니다. 임의의 스케일링을 수행합니까? –

+1

조금 더 생각해 보았습니다.이 원을 텍스처 쿼터로 매핑하는 텍스처를 사용하고 있습니까? 그리고 포인트가 쿼드의 원 영역 내에 있는지 알고 싶습니까? 비정상적으로 쿼드를 변환하지 않는 한 위에서 언급 한 방식을 계속 사용할 수 있어야합니다. –

답변

1

나는 맨 먼저 어떤 단순한 기하학적 형태의 일반적인 형태를 사용합니다. 원, 사각형, 삼각형 등 ... 몇 가지 간단한 수학으로 포인트가 모든 범위 내에 있는지 확인할 수 있습니다. 따라서 가능한 경우 Shape 클래스의 하위 클래스를 만들어 간단한 모양에 대한 테스트 속도를 높입니다.

비정상적인 변환 특성을 가진 임의의 모양 또는 모양의 경우 은 픽셀 리드 백 또는 오 클루 전 쿼리를 수행해야 할 수 있습니다.

관련 문제