gpt4 book ai didi

objective-c - 如何处理openGL中几个圆圈的淡出?

转载 作者:行者123 更新时间:2023-11-29 13:32:40 29 4
gpt4 key购买 nike

我需要在帧上绘制小圆圈,并使它们在几帧后消失(淡出)。如何使用 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];

我不明白的是如何跟踪同一个圆圈并在连续的帧中淡化它。谢谢

最佳答案

您将需要在每一帧上重新渲染所有对象(圆圈)。所以你需要保留一个数据结构来保存关于圆的信息(可能它们的中心、半径和不透明度就足够了)。像这样:

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

}

关于objective-c - 如何处理openGL中几个圆圈的淡出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484314/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com