ببین اینقدر سخت نیست که فکر می کنی

#include <GL/glut.h> // برای مدیریت پنجره ورودی ها و خروجی ها که سر فایل های هسته اپن جی ال نیز در آن تعریف شده است
GLfloat m=0.01,i=0.0; // متغیری کلی برای ایجاد حالت انیمیشن
void special( int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_UP:
m+=0.01;
break;
case GLUT_KEY_DOWN:
m-=0.01;
break;
}
}

void Display() // تابع اصلی نمایش
{
glClear(GL_COLOR_BUFFER_BIT); //clears display window پاک کردن پنجره نمایش در هر بار فراخوانی تابع اصلی نمایش
glColor3f(0.0, 0.0, 0.0); // تعیین رنگ پیکسل

GLUquadricObj *circle = gluNewQuadric (); // ایجاد یک پوینتر برای شی از معادله درجه 2
gluQuadricDrawStyle (circle, GLU_SILHOUETTE); //تعیین استیل تابع درجه دو از نوع خطی باعث رسم تابع در جه 2 به صورت مجموعه ایی از خطهای اطراف آن می شود
gluDisk (circle,0,0.8,5000,1); // این تابع برای رسم دایره با استیل تعریف شده 5000 تکه ایی به شعاع 0.8 می شود
gluDeleteQuadric(circle); // حذف اشاره گر استیل

glPushMatrix(); // برای اینکه روی یک قسمت خاص تغییری ایجاد کنیم از این تابع استفاده می کنیم
glEnable (GL_POINT_SMOOTH);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // این دو خط برای نرم کردن گوشه های پیکسل هستند
i+=m; // افزایش آی برای ایجاد حالت چرخش
glRotatef(i,0,0,0.1); // چرخش دادن پیکسل به اندازه 0.1 آی
glPointSize(8.0); // تعیین اندازه پیکسل
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_POINTS); //هر ورتکس یک پیکسل را روشن می کند GL_POINTS با
glVertex2f(0.25, 0.75); //تعیین مختصات نقطه به صورت ثابت
glEnd(); // پایان ترسیم نقطه
glPopMatrix(); // پایان قسمتی که تغییرات باید روی آن اعمال شود

glPushMatrix(); // برای اینکه روی یک قسمت خاص تغییری ایجاد کنیم از این تابع استفاده می کنیم
glEnable (GL_POINT_SMOOTH);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // این دو خط برای نرم کردن گوشه های پیکسل هستند

glRotatef(-i,0,0,0.1); // چرخش دادن پیکسل به اندازه 0.1 جی
glPointSize(10.0); // تعیین اندازه پیکسل
glColor3f(1.0, 0.0, 1.0);
glBegin(GL_POINTS); //هر ورتکس یک پیکسل را روشن می کند GL_POINTS با
glVertex2f(0.25, 0.75); //تعیین مختصات نقطه به صورت ثابت
glEnd(); // پایان ترسیم نقطه
glPopMatrix(); // پایان قسمتی که تغییرات باید روی آن اعمال شود

glutSwapBuffers(); // این تابع جای بافر ها را برای نمایش بدون پرش یا فلیکر عوض می کند
}

int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(500,500);
glutInitWindowSize(300,300);
glutCreateWindow("mS Circle");
glClearColor(1.0,1.0,1.0,0.0);
glutDisplayFunc(Display);
glutIdleFunc(Display);
glutSpecialFunc(special);
glutMainLoop();
return 0;
}