Kali ini saya mencoba berbagi ilmu dengan teman-teman mengenai perkuliahan saya. Saya tidak berniat berbagi ilmu, bukan berbagi tugas. Heheheh
Kali ini, saya mendapatkan tantangan untuk membuat virtual gerakan planet dengan menggunakan code blocks. Tentunya pada perkuliahan komputer grafik. Contoh: bisa Anda perhatikan pada gambar disamping. Gambar tersebut merupakan printscreen dari program yang sudah saya buat. Tenang, tidak membutuhkan waktu lama dalam pengerjaannya.
Kemudian, planet-planet kecil itu tidak secara otomatis bisa bergerak, harus kita gerakan dengan menggunakan fungsi tombol keyboard. dibawah ini petunjuk untuk menjalankannya:
d = semua planet berputar pada sumbunya
y = evolusi
Y = kebalikan y
a = evolusi + rotasi
Lalu ini daftar scrpitnya:
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif
#include <stdlib.h>
static int year = 0, year1 = 0, year2 = 0, year3 = 0,
day1 = 0, day2 = 0, day3 = 0;
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glPushMatrix(); // lintasan planet 1
glColor3f (1.0, 1.0, 1.0);
glutWireSphere(1.54, 50, 2);
glColor3f (0.0, 0.0, 0.0);
glutWireSphere(1.5294, 50, 2);
glPopMatrix();
glPushMatrix(); // lintasan planet 2
glColor3f (1.0, 1.0, 1.0);
glutWireSphere(2.0, 60, 2);
glColor3f (0.0, 0.0, 0.0);
glutWireSphere(1.99, 60, 2);
glPopMatrix();
glPushMatrix(); // lintasan planet 3
glColor3f (1.0, 1.0, 1.0);
glutWireSphere(2.5, 60, 2);
glColor3f (0.0, 0.0, 0.0);
glutWireSphere(2.49, 60, 2);
glPopMatrix();
glPushMatrix();
glColor3f (1.0, 0.0, 0.0);
glRotatef((GLfloat) year, 0.0,0.0,1.0);
glutWireSphere(1.0, 25, 16); /* gambar matahari */
glPopMatrix();
glPushMatrix();
glColor3f (1.0, 0.5, 0.0);
glRotatef ((GLfloat) year1, 0.0, 0.0, 1.0);
glTranslatef (1.5, 0.0, 0.0);
glRotatef ((GLfloat) day1, 0.0, 0.0, 1.0);
glutWireSphere(0.2, 10, 8); /* gambar planet kecil 1 */
glPopMatrix();
glPushMatrix();
glColor3f (1.0, 1.0, 0.0);
glRotatef ((GLfloat) year2, 0.0, 0.0, 1.0);
glTranslatef (2.0, 0.0, 0.0);
glRotatef ((GLfloat) day2, 0.0, 0.0, 1.0);
glutWireSphere(0.2, 10, 8); /* gambar planet kecil 2 */
glPopMatrix();
glPushMatrix();
glColor3f (0.0, 0.0, 0.8);
glRotatef ((GLfloat) year3, 0.0, 0.0, 1.0);
glRotated (0.0, 0.0, 1.0, 0.0);
glTranslatef (2.5, 0.0, 0.0);
glRotatef ((GLfloat) day3, 0.0, 0.0, 1.0);
glutWireSphere(0.2, 10, 8); /* gambar planet kecil 3 */
glPopMatrix();
glutSwapBuffers();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
void keyboard (unsigned char key, int x, int y)
{
switch (key)
{
case 'd':
day1 = (day1 + 10) % 360;
day2 = (day2 + 10) % 360;
day3 = (day3 + 10) % 360;
glutPostRedisplay();
break;
case 'D':
day1 = (day1 - 10) % 360;
day2 = (day2 - 10) % 360;
day3 = (day3 - 10) % 360;
glutPostRedisplay();
break;
case 'y':
year1 = (year1 + 5) % 360;
year2 = (year2 + 7) % 360;
year3 = (year3 + 9) % 360;
year = (year + 1) % 360;
glutPostRedisplay();
break;
case 'Y':
year1 = (year1 - 5) % 360;
year2 = (year2 - 7) % 360;
year3 = (year3 - 9) % 360;
year = (year - 1) % 360;
glutPostRedisplay();
break;
case 'a':
day1 = (day1 + 10) % 360;
day2 = (day2 + 10) % 360;
day3 = (day3 + 10) % 360;
year1 = (year1 + 5) % 360;
year2 = (year2 + 7) % 360;
year3 = (year3 + 9) % 360;
year = (year + 1) % 360;
glutPostRedisplay();
break;
case 'A':
day1 = (day1 - 10) % 360;
day2 = (day2 - 10) % 360;
day3 = (day3 - 10) % 360;
year1 = (year1 - 5) % 360;
year2 = (year2 - 7) % 360;
year3 = (year3 - 9) % 360;
year = (year - 1) % 360;
glutPostRedisplay();
break;
case 27:
exit(0);
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
Maaf mau nanya, source code untuk zoom in zoom out itu bagaimana?
ReplyDelete