logo

C'de basit Animasyon (Devrim) için OpenGL programı

OpenGL 2D ve 3D Vektör Grafiklerini oluşturmak için diller arası, platformlar arası bir API'dir. Bunu kullanarak birçok tasarımın yanı sıra animasyonlar da yapabiliriz. Aşağıda kullanılarak yapılan basit animasyon verilmiştir. OpenGL .
Yaklaşmak :  
Bir resmin hareket etmesini sağlamak için, görüntülemek için kullanılan bir işlevin çalışma prosedürünü anlamamız gerekir; glClear(GL_COLOR_BUFFER_BIT) . Görevi, belirli bir süre sonra (normalde 1/30 saniye veya 1/60 saniye sonra) ekranı varsayılan değerde temizlemektir. Yani herhangi bir koordinat değişikliği olursa, insan gözü yalnızca 1/16 saniyelik bir mesafeyle ayrılan görüntüyü (görüşün kalıcılığı) ayırt edebildiği için hareket ediyormuş gibi görünecektir.
Şimdi dairenin koordinatları X = r*cos(?) ve Y = r*sin(?) veya elips için X = rx*cos(?) ve Y = ry*cos(?) şeklindedir; burada rx ve ry, X- ve Y- yönünde yarıçaptır ve ? açıdır. 
Eğer değişirsek ? 0'dan 2*pi'ye (360 derece) çok küçük bir artışla (örneğin 1 derece) ve bu koordinat üzerinde bir nokta çizerek tam bir daire veya elips yapabiliriz. Ayrıca başlangıç ​​ve bitiş değerlerini değiştirerek yarım daire veya herhangi bir daire ya da elips yayı da yapabiliriz. ? (açı).
Bu kavramlar aşağıdaki Animasyonu çizmek için kullanılır: 
 

  • Elipsin 7 yatay parçası ve 3 dikey tam elipsin yanı sıra 1 dış daire ve bir dış elips, yörüngenin ayarlanmasıyla çizilen bir yörüngeyi görselleştirmek için kullanılır. ? yarıçapın yanı sıra.
  • Şekli oluşturmak için bir dikey çizgi çizilir. Daha sonra hareket etmesini sağlamak için, hareketi daha düzgün hale getirmek için j değerinin çok küçük miktarda değiştiği başka bir döngü verilir.
  • Şekli bir arada tutmak için tüm noktaları aynı türde hareketle hareket ettirmemiz gerektiğinden, hareket denklemi şu şekildedir: Glyx2i(x/2 - 600*cos(j) /2 - 100*sin(j)) her içte verilir döngü için böylece tüm noktalara bir arada uygulanabilir.


Ubuntu işletim sistemi üzerinde çalışmak için:  
 

Java vaka bildirimi
  gcc filename.c -lGL -lGLU -lglut -lm   where filename.c is the name of the file with which this program is saved.


 




Aşağıda C'deki uygulama verilmiştir.
 

shreya ghoshal'ın ilk kocası
C
// C Program to illustrate  // OpenGL animation for revolution #include #include #include // global declaration int x y; float i j; // Initialization function void myInit (void) {  // Reset background color with black (since all three argument is 0.0)  glClearColor(0.0 0.0 0.0 1.0);    // Set picture color to green (in RGB model)  // as only argument corresponding to G (Green) is 1.0 and rest are 0.0  glColor3f(0.0 1.0 0.0);    // Set width of point to one unit  glPointSize(1.0);  glMatrixMode(GL_PROJECTION);  glLoadIdentity();    // Set window size in X- and Y- direction  gluOrtho2D(-780 780 -420 420); } // Function to display animation void display (void) {  // Outer loop to make figure moving  // loop variable j iterated up to 10000  // indicating that figure will be in motion for large amount of time  // around 10000/6.29 = 1590 time it will revolve  // j is incremented by small value to make motion smoother  for (j = 0; j < 10000; j += 0.01)  {  glClear(GL_COLOR_BUFFER_BIT);  glBegin(GL_POINTS);    // Iterate i up to 2*pi i.e. 360 degree  // plot point with slight increment in angle  // so it will look like a continuous figure  // Loop is to draw outer circle  for (i = 0;i < 6.29;i += 0.001)  {  x = 200 * cos(i);  y = 200 * sin(i);  glVertex2i(x y);    // For every loop 2nd glVertex function is  // to make smaller figure in motion  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    // 7 loops to draw parallel latitude  for (i = 1.17; i < 1.97; i += 0.001)  {  x = 400 * cos(i);  y = -150 + 300 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 1.07; i < 2.07; i += 0.001)  {  x = 400 * cos(i);  y = -200 + 300 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 1.05; i < 2.09; i += 0.001)  {  x = 400 * cos(i);  y = -250 + 300 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 1.06; i < 2.08; i += 0.001)  {  x = 400 * cos(i);  y = -300 + 300 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 1.10; i < 2.04; i += 0.001)  {  x = 400 * cos(i);  y = -350 + 300 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 1.16; i < 1.98; i += 0.001)  {  x = 400 * cos(i);  y = -400 + 300 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 1.27; i < 1.87; i += 0.001)  {  x = 400 * cos(i);  y = -450 + 300 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    // Loop is to draw vertical line  for (i = 200; i >=- 200; i--)  {  glVertex2i(0 i);  glVertex2i(-600 * cos(j) i / 2 - 100 * sin(j));  }    // 3 loops to draw vertical ellipse (similar to longitude)  for (i = 0;i < 6.29; i += 0.001)  {  x = 70 * cos(i);  y = 200 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 0; i < 6.29; i += 0.001)  {  x = 120 * cos(i);  y = 200 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    for (i = 0; i < 6.29; i += 0.001)  {  x = 160 * cos(i);  y = 200 * sin(i);  glVertex2i(x y);  glVertex2i(x / 2 - 600 * cos(j) y / 2 - 100 * sin(j));  }    // Loop to make orbit of revolution  for (i = 0; i < 6.29; i += 0.001)  {  x = 600 * cos(i);  y = 100 * sin(i);  glVertex2i(x y);  }  glEnd();  glFlush();  } } // Driver Program int main (int argc char** argv) {  glutInit(&argc argv);    // Display mode which is of RGB (Red Green Blue) type  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);    // Declares window size  glutInitWindowSize(1360 768);    // Declares window position which is (0 0)  // means lower left corner will indicate position (0 0)  glutInitWindowPosition(0 0);  // Name to window  glutCreateWindow('Revolution');  // Call to myInit()  myInit();  glutDisplayFunc(display);  glutMainLoop(); } 


 

Test Oluştur