2011-08-29 4 views
4

OpenGL ES 2.0에는 ES 1.0에서 정의 된 GL_POINT_SMOOTH 정의가 없습니다.GL_POINT_SMOOTH를 사용하는 ES 1.0 Circles에 해당하는 OpenGL ES 2.0?

glEnable(GL_POINT_SMOOTH); 
glPointSize(radius*2); 
glDrawArrays(GL_POINTS,0,nPoints); 

은 ES 2.0에 상응하는, 버텍스 쉐이더에 갈 아마도 뭔가 있는가, 아니면 각 원에 대한 다각형을 사용해야합니다 :이 작품 더 이상 내가 원을 그리는 데 사용 된 코드를 의미?

+0

가능한 [iPhone 용 OpenGL ES 2.0 : GL_POINT_SMOOTH는 ES 2.0과 함께 사각형을 그리고 ES 1.0에서 작동합니다.] (http://stackoverflow.com/questions/7234379/opengl-es-2-0-with-iphone- gl - point-smooth-draws-squares-with-es-2-0-but-works-in) –

+0

@ Kornel이 질문에 대한 답은 ES 2.0이 아니라 OpenGL ES 1.0입니다. – KomodoDave

+0

여전히 동일한 질문을 두 번 내지 마십시오. –

답변

6

포인트 스프라이트를 사용하여 이것을 에뮬레이션 할 수 있습니다. 포인트 스프라이트를 활성화하면 프래그먼트 셰이더에서 읽을 수있는 특별한 변수 gl_PointCoord을 얻을 수 있습니다. 그러면 현재 점의 제곱에있는 단편의 좌표가 표시됩니다.

if(texture2d(circle, gl_PointCoord).r < 0.1) 
    discard; 

편집 : 또는 당신이 할 수있는 당신은 원 (0의 색이없는 원 픽셀)를 포함하는 질감을 읽은 다음 그 텍스처 값이 0 모든 조각을 폐기하려면 다음을 사용할 수 있습니다 그것을 짜임새없이, 계산의 복잡성에 대한 질감 액세스 대기 시간을 거래하고 바로 원의 방정식을 평가하여 :

이 더 제곱 반경에 대해합니다 ( length 기능에 사용)의 제곱근을 삭제하고 비교하여 최적화 될 수
if(length(gl_PointCoord-vec2(0.5)) > 0.5) 
    discard; 

:

vec2 pt = gl_PointCoord - vec2(0.5); 
if(pt.x*pt.x+pt.y*pt.y > 0.25) 
    discard; 

아마도 내장 된 length 함수는 길이 계산을 위해 최적화되었고 하드웨어에서 직접 구현되었을 수도 있습니다.

+0

달콤한, 고마워요. 다시 크리스천 :) 그게 지금 마지막 질문입니다! – KomodoDave

0

답변 - 예, 부드러운 점을 얻으려면 다각형 (예 : 질감이있는 사각형)을 사용해야합니다.

관련 문제