2012-07-14 3 views
1

프레임에 작은 원을 그려서 몇 프레임 후에 사라지게해야합니다 (페이드 아웃). OpenGL ES로 어떻게 이것을 할 수 있습니까? 이해가 안 무엇OpenGL에서 여러 원의 페이드 아웃을 처리하는 방법은 무엇입니까?

[EAGLContext setCurrentContext:context]; 
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
    glViewport(0, 0, backingWidth, backingHeight); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f); 
    glMatrixMode(GL_MODELVIEW); 

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 

    GLfloat vertices[720]; 

    for (int i = 0; i < 720; i += 2) { 
     vertices[i] = (cos(DEGREES_TO_RADIANS(i)) * 1); 
     vertices[i+1] = (sin(DEGREES_TO_RADIANS(i)) * 1); 
    } 

    glVertexPointer(2, GL_FLOAT, 0, vertices); 
    glEnableClientState(GL_VERTEX_ARRAY); 

    glColor4f(1.0f, 1.0f, 0.0f, 1.0f); 

    glDrawArrays(GL_TRIANGLE_FAN, 0, 360); 

    glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
    [context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

같은 원을 추적하고 연속에서 퇴색하는 방법입니다 :

내가 지금까지 가지고있는 코드는 프레임에 원을 그릴 수있다 프레임. 감사합니다.

답변

1

모든 프레임에서 모든 객체 (원)를 다시 렌더링해야합니다. 따라서 서클에 대한 정보를 보유하는 데이터 구조를 유지해야합니다 (중심, 반지름 및 불투명도로 충분할 수 있음). 이런 식으로 뭔가 : 당신이 그들을 끌어 갈 때 그런

typedef struct Circle { 
    NSPoint center; 
    float radius; 
    float opacity; 
} Circle; 

Circle allCircles [ kMaxNumCircles ]; 

는, 당신은 자신의 투명도를 업데이트, 원의 배열을 반복 한 다음 그리기 :

for (int i = 0; i < kMaxNumCircles; i++) 
{ 
    allCircles [ i ].opacity -= someDelta; 
    drawCircle (allCircles [ i ]); 
} 

drawCircle() 기능은 할 수있는 것을 위에 적어 두었습니다 :

void drawCircle(Circle c) 
{ 
    GLfloat vertices[720]; 

    for (int i = 0; i < 720; i += 2) { 
     vertices[i] = (cos(DEGREES_TO_RADIANS(i)) * 1) + c.center.x; 
     vertices[i+1] = (sin(DEGREES_TO_RADIANS(i)) * 1) + c.center.y; 
    } 

    glVertexPointer(2, GL_FLOAT, 0, vertices); 
    glEnableClientState(GL_VERTEX_ARRAY); 

    glColor4f(1.0f, 1.0f, 0.0f, c.opacity); 

    glDrawArrays(GL_TRIANGLE_FAN, 0, 360); 

} 
관련 문제