Program Simulasi Planet (Bumi Mengelilingi Matahari) Menggunakan Opengl
Selasa, 15 April 2014
Tambah Komentar
OpenGL adalah kumpulan dari standard API yang menghubungkan software dengan hardware grafis buat membuat tampilan gambar 2D serta 3D. Intinya OpenGL itu ialah kumpulan library buat mengakses hardware (GL= graphical library).
Berikut ini salah satu contoh program OpenGL, yaitu simulasi bumi mengelilingi matahari serta bulan mengelilingi Bumu. Pada simulasi ini saya anggap teman teman telah paham dasar-dasar dari OpenGL serta telah paham menambahkan Library (glu32.dll, glut32.dll serta opengl32.dll) serta header (glut.h, SOIL.h) serta cara meng-Compile program.
Jika teman-teman belum paham silahkan bertanya.
Catatan Sebelum menjalankan program terlebih dahulu teman teman menambahkan gambar berikut pada folder yang sama dengan file coding.
Matahari = LoadGLTexture("matahari.bmp");
BUMI = LoadGLTexture("bumi.bmp");
bulan = LoadGLTexture("bulan.jpg");
langit = LoadGLTexture("Langit.jpg");
Download Library serta Header lewat ling dibawah ini.
Download Library serta Header
Baca Petunjuk diatas terlebih dahulu.
#include<windows.h>
#include<stdio.h>
#include<glut.h> // OpenGL Graphics Utility Library
#include"SOIL.h"
void display(void);
void init(void);
void keyboard(unsigned char key, int x, int y);
void reshape (int w, int h);
static void KeyPressFunc( unsigned char Key, int x, int y );
GLUquadricObj *pObject; // pointer Object
GLuint BUMI, Matahari, bulan, langit;
GLuint tex_2d;
GLuint LoadGLTexture(const char *filename)
{
// memuat file gambar secara langsung sebagai OpenGL Object
tex_2d = SOIL_load_OGL_texture(filename, SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y);
// memeriksa kesalahan selama proses load
if(tex_2d == 0){
printf("SOIL loading error: %s\n", SOIL_last_result());
}
return tex_2d;
}
int main(int argc, char **argv)
{
//Untuk inisialisasi secara umum terhadap
//nilai-nilai yang ada pada library GLUT
glutInit(&argc, argv);
//Untuk inisialisasi modus display.
//bersifat double buffered, dengan warna RGB.
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
// menseting ukuran windows (lebar x panjang)
glutInitWindowSize(1000,1000);
// menseting posisi windows
glutInitWindowPosition(200,0);
//Memberi judul pada windows dengan “BELAJAR GL”
glutCreateWindow("BELAJAR GL");
init();
// Set up callback functions for key presses
// memanggil kembali fungsi glut
glutKeyboardFunc(KeyPressFunc);
glutDisplayFunc(display);
glutReshapeFunc(reshape);
//enter event loop
glutMainLoop();
system("PAUSE");
return 0; }
void init(void)
{
Matahari = LoadGLTexture("matahari.bmp");
BUMI = LoadGLTexture("bumi.bmp");
bulan = LoadGLTexture("bulan.jpg");
langit = LoadGLTexture("Langit.jpg");
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};
GLfloat mat_shininess[] = {50.0};
GLfloat light_position[] = {1.0, 1.0, 1.0, 1.0};
pObject = gluNewQuadric();
gluQuadricNormals(pObject, GLU_SMOOTH);
gluQuadricTexture(pObject, GL_TRUE);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
// Merubah status OpenGL ke Mode Proyeksi
glMatrixMode (GL_PROJECTION);
// memanggil matriks identitas serta dijadikan matriks (proyeksi)
glLoadIdentity();
//parameter Transformasi
gluPerspective(50.0, (GLfloat) w/(GLfloat) h, 1.0, 50.0);
//Merubah status OpenGL ke Mode View
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//meletakkan posisi kamera di deapan object "gluLookAt()"
gluLookAt (10.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
}
// glutKeyboardFunc is called below to set this function to handle
// all normal key presses.
static void Key_r(void);
static void Key_s(void);
static void KeyPressFunc( unsigned char Key, int x, int y )
{
switch ( Key ) {
case 'R':
case 'r':
Key_r();
break;
case 's':
case 'S':
Key_s();
break;
case 27: // Escape key
exit(1);
}
}
static GLenum spinMode = GL_TRUE;
static GLenum singleStep = GL_FALSE;
static void Key_r(void)
{
if ( singleStep ) { // If ending single step mode
singleStep = GL_FALSE;
spinMode = GL_TRUE; // Restart animation
}
else {
spinMode = !spinMode; // Toggle animation on and off.
}
}
static void Key_s(void)
{
singleStep = GL_TRUE;
spinMode = GL_TRUE;
}
// mendeklarasikan variabel buat kecepartan gerak objek.
static float HourOfDay = 0.0;
static float DayOfYear = 0.0;
static float AnimateIncrement = 24.0; // Time step for animation (hours)
void display(void){
// Clear the redering window
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (spinMode){
// Update the animation state
HourOfDay += AnimateIncrement;
DayOfYear += AnimateIncrement/24.0;
if(DayOfYear > 360){
DayOfYear = 1;
}
if(HourOfDay > 8640){
HourOfDay = 24;
}
//HourOfDay = HourOfDay - ((int)(HourOfDay/25))*25;
//DayOfYear = DayOfYear - ((int)(DayOfYear/365))*365;
}
// Cek Nilai
printf("Nilai HourOfDay = %.0f serta DayOfYear = %.0f \n", HourOfDay, DayOfYear);
//printf("Nilai DayOfYear = %f \n", DayOfYear);
glPushMatrix();
glDisable(GL_LIGHTING);
glBindTexture(GL_TEXTURE_2D, langit);
glutWireSphere(10.0, 360, 180);
glPopMatrix();
glPushMatrix();
// mematikan fungsi lighting
glDisable(GL_LIGHTING);
//glColor3f(1.0, 1.0, 0.0);
//glRotatef((GLfloat) rev, 0.0, 1.0, 0.0);
//glTranslatef(4.0, 0.0, 0.0);
glRotatef(360.0*DayOfYear/365.0, 0.0, 1.0, 0.0);
//glutSolidSphere(1.0, 20, 25);
glBindTexture(GL_TEXTURE_2D, Matahari);
gluSphere(pObject, 1.0, 360, 180);
// menghidupkan kembali fungsi lighting
glEnable(GL_LIGHTING);
glPushMatrix();
glDisable(GL_LIGHTING);
//glColor3f(0.0, 0.0, 1.0);
glRotatef(DayOfYear, 0.0, 1.0, 0.0);
glTranslatef(4.0, 0.0, 0.0);
glRotatef(HourOfDay, 0.0, 1.0, 0.0);
//glutSolidSphere(0.5, 15, 20);
glBindTexture(GL_TEXTURE_2D, BUMI);
gluSphere(pObject, 0.5, 360, 180);
glEnable(GL_LIGHTING);
glPushMatrix();
glDisable(GL_LIGHTING);
//glColor3f(1.0, 1.0, 1.0);
glRotatef(360.0*12.0*DayOfYear/365.0, 0.0, 1.0, 0.0);
glTranslatef(2.0, 0.0, 0.0);
//glutSolidSphere(0.2, 10, 15);
glBindTexture(GL_TEXTURE_2D, bulan);
gluSphere(pObject, 0.3, 360, 180);
glEnable(GL_LIGHTING);
glPopMatrix(); glPopMatrix();
glPopMatrix();
glutSwapBuffers();
if ( singleStep ) {
spinMode = GL_FALSE;
}
glutPostRedisplay(); // Request a re-draw for animation purposes
}
Itulah artikel tentang "Program Simulasi Planet (Bumi Mengelilingi Matahari) menggunakan OpengL". Semoga artikel ini bermanfaat bagi teman teman serta jika ada yang enggak dimengerti silahkan bertanya.
Belum ada Komentar untuk "Program Simulasi Planet (Bumi Mengelilingi Matahari) Menggunakan Opengl"
Posting Komentar