1

フレームに小さな円を描き、数フレーム後に消えるようにする必要があります (フェードアウト)。OpenGL ES でこれを実現するにはどうすればよいですか?

これは私がこれまでに持っているもので、フレームに円を描画するコードです:

 [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];

私が理解していないのは、同じ円を追跡し、連続するフレームでフェードする方法です。ありがとう

4

1 に答える 1

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);

}
于 2012-07-14T15:24:47.220 に答える