本文代码在Windows下编写,用到了GLUT和GLEW库。
实现了一个点沿圆周运动,移动轨迹逐渐变淡消失的效果。
基本思路是在每帧刷新时,利用FBO先将图形渲染到一张贴图(纹理),然后再将纹理渲染到屏幕上。其中将图形渲染到贴图时,利用混合绘制透明的黑色背景,再绘制移动的圆点,这样每帧更新时会有新的黑背景叠加,之前位置的圆点会被逐渐覆盖并慢慢消失。
然后上代码
我将圆点在一个圆心在(0,0),半径为1的圆周上运动,计算圆点位置的代码如下(将圆周平分为CIRCLE_POINT_NUM个点)
void CalculatePoints()
{
circlepoints.clear();
float angle = 360.0f/CIRCLE_POINTS_NUM;
for (int i=0; i<CIRCLE_POINTS_NUM; i++)
{
XY xy;
xy.x = cos(angle*i*Pi/180);
xy.y = sin(angle*i*Pi/180);
circlepoints.push_back(xy);
}
}
创建FBO的代码
bool CreateFBO()
{
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_