contoh, argumen diisi angka -1 (- 1.0) Argumen ketiga juga mirip dengan argumen kedua namun berputarnya terhadap sumbu vertical (tegak lurus) Argumen keempat untuk memutar kotak flat dengan sumbu titik nol diagram cartesius. Jika diisi angka 1 (1.0) maka akan berputar berlawanan arah putaran jarum jam (counter clockwise), sedangkan untuk berputar searah dengan arah putaran jarum jam (clockwise) diisi angka -1 (-1.0). Hal yang menarik jika argumen ini diisi angka 0 (0.0) maka kotak akan zoom in dan zoom out bergantian. Kombinasi dari argumen-argumen yang ada akan membuat variasi pergerakan yang sangat menarik Untuk mengatur laju perputaran animasi yang terjadi bisa dengan memodifikasi theta, atau dengan perintah sleep(argumen). Laju kecepatan putar tergantung pada nilai argumen pada sleep, makin besar angkanya makin lambat bukan makin cepat. Lebih lanjut dengan grafik, jika akan membuat segi enam maka perubahan yang terjadi seperti berikut: Program 11.5
/*OpenGLanimationcodegoeshere*/ glClearColor(0.0f,0.0f,0.0f,1.0f); glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glRotatef(theta,0.0f,0.0f,‐1.0f); glBegin(GL_POLYGON); glColor3f(1.0f,0.0f,0.0f);glVertex2f(‐0.3f,0.54f); glColor3f(0.0f,1.0f,0.0f);glVertex2f(0.3f,0.54f); glColor3f(0.0f,0.0f,1.0f);glVertex2f(0.61f,0.0f); glColor3f(0.0f,1.0f,1.0f);glVertex2f(0.3f,‐0.54f); glColor3f(1.0f,1.0f,0.0f);glVertex2f(‐0.3f,‐0.54f); glColor3f(1.0f,1.0f,1.0f);glVertex2f(‐0.61f,0.0f); glEnd(); glPopMatrix(); SwapBuffers(hDC); theta+=2.0f; Sleep(1);
Tentu saja vertex berubah bertambah banyak, banyaknya vertex sesuai dengan jumlah sudut yang dibentuk. Jangan lupa argumen pada glBegin diisi dengan GL_POLYGON sehingga bisa menciptakan segi banyak seperti yang dikehendaki. Selain glRotatef() pengaturan animasi dapat juga dengan glTranslatef(). Dengan perintah ini kita dapat menggerakkan obyek kekiri, kekanan, ke atas, maupun ke bawah. Contoh program sebagai berikut: Program 11.6 #include<windows.h> #include<gl/gl.h> /************************** *FunctionDeclarations **************************/ LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage, WPARAMwParam,LPARAMlParam); voidEnableOpenGL(HWNDhWnd,HDC*hDC,HGLRC*hRC); voidDisableOpenGL(HWNDhWnd,HDChDC,HGLRChRC); /************************** *WinMain **************************/ intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTRlpCmdLine, intiCmdShow) { WNDCLASSwc; HWNDhWnd; HDChDC; HGLRChRC; MSGmsg; BOOLbQuit=FALSE; floattheta=‐1.0f; floatalpha=‐1.0f; /*registerwindowclass*/ wc.style=CS_OWNDC; wc.lpfnWndProc=WndProc; wc.cbClsExtra=0;
Next read halaman 9.