Jun/090
Fog and Lighting
Langkah pertama kali adalah kita membuat sebuah project glut pada DevC++. Kita dapat menggunakan template kode (dari modul praktikum 11 GK) tentang bayangan untuk kita ubah kodenya. pada kode program terdapat sebuah method void idle() dan method ini dipanggil di main oleh glutIdleFunc(idle);. Hal ini digunakan agar saat program idle (tidak melakukan apapun) maka langkah-langkah pada method idle() dijalankan. Dalam method idle() terdapat variabel yang nilainya diubah setiap waktu, dan variabel itu digunakan sebagai rotasi benda. Alhasil saat program dijalankan maka benda akan bergerak berputar. Jika kita ingin benda diam pada posisi tertentu, teman-teman dapat menonaktifkan fungsi glutIdleFunc(idle) dan kita dapat merubah nilai rx (untuk rotasi sumbu x) dan ry (rotasi sumbu y) pada deklarasi awal.
Pada method void draw() digunakan untuk membentuk benda. Pada template berisi kode glutSolidTeapot(30.0); yang ini akan membentuk teko teh. Jika teman-teman ingin menggambar bentuk-bentuk lain, dapat diganti oleh kode lain. Salah satu bentuk yang dapat kita ambil kita dapat melihat pada contoh template lain (ini juga diambil dari praktikum 7) tentang objek 3D. Objek tersebut diantaranya :
1. untuk menggambar bola
gluSphere(gluNewQuadric(), <diameter>,<bujur>,<lintang>);
2. untuk menggambar tabung
gluCylinder(gluNewQuadric(), <diameter bawah>,<diameter atas>,<tinggi>,<bujur>,<lintang>);
3. untuk menggambar cakram
gluDisk(gluNewQuadric(),<diameter dalam>,<diameter luar>,<banyak sisi>,<loop>);4. untuk menggambar potongan cakram
gluPartialDisk(gluNewQuadric(),<diameter dalam>,<diameter luar>,<sisi>,<loop>,<sudut mulai>,<sudut akhir>);
Sedangkan untuk efek fog atau pengkabutan teman-teman dapat menambahkan kode dibawah ini pada method main atau dapat juga pada method inisialisasi.
static float fog_color[] = {<red>,<green>,<blue>,<alpha>};
float fogDensity =<nilai kekaburan>;
glEnable(GL_FOG); // Mengaktifkan efek fog
glFogi(GL_FOG_MODE, GL_EXP); // Menentukan tipe fog
glFogf(GL_FOG_DENSITY, fogDensity); // Menentukan intensitas fog
glFogfv(GL_FOG_COLOR, fog_color); // Menentukan warna fog
Dan tidak ketinggalan juga tentang posisi pencahayaan. Pada template kode, terdapat variabel yang menentukan posisi cahaya, yaitu :
float l[] = { <posisi x>, <posisi y>, <posisi z> };
Teman-teman dapat memodifikasi sendiri dimana sumber cahaya diletakkan. Misal jika menginginkan posisi terletak pada sudut 45 derajat, maka yang harus kita lakukan adalah nilai posisi x dan y harus sama, sebab dengan perhitungan phitagoras itu adalah sudut 45 derajat. Teman-teman dapat menentukan posisi lain sesuai dengan perhitungan yang ada.
File pendukung
Apr/090
GK Modul 5
#include <GL/glut.h>
#include <stdlib.h>
static int slices = 16; //kerangka horisontal
static int stacks = 16; //kerangka vertikal
// ^ semakin besar angkanya semakin halus objeknya
void init(void)
{
glClearColor (1.0, 1.0, 1.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BI
glColor3d(1,0,0);
glPushMatrix();
glTranslated(0,1.2,-6);
glRotated(60,1,0,0);
/*
Wire=Kerangka
Solid=bentuk utuh
cone=bentuk cone(es krim)
Sphere=bola
Torus=donat
*/
Apr/090
GK Modul 5 No 3
/*
* Program ini mendemontrasikan transformasi single modeling dengan
* glScalef() dan transformasi single viewing dengan gluLookAt() pada sebuah obyek.
*/
#include <GL/glut.h>
#include <stdlib.h>
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity (); /* clear the matrix */
/* viewing transformation */
gluLookAt (5.0, 0.0, 5.0, 0.0, 0.0, 0.0, 4.0, 1.0, 0.0);
glScalef (2.0, 3.0, 2.0); /* modeling transformation */
glutWireSphere(1.0, 40, 16);
glFlush ();
}
Apr/090
GK Tugas 5 No 2
/*
* Program ini mendemontrasikan transformasi single modeling dengan
* glScalef() dan transformasi single viewing dengan gluLookAt() pada sebuah obyek.
*/
#include <GL/glut.h>
#include <stdlib.h>
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity (); /* clear the matrix */
/* viewing transformation */
gluLookAt (1.0, 1.0, 10.0, 0.0, 0.0, 4.0, 6.0, 1.0, 0.0);
glScalef (2.0, 4.0, 1.0); /* modeling transformation */
glutWireCube (1.0);
glFlush ();
}
Apr/090
GK Tugas 5 No 1
/*
* Program ini mendemontrasikan transformasi single modeling dengan
* glScalef() dan tra/*
* Program ini mendemontrasikan transformasi single modeling dengan
* glScalef() dan transformasi single viewing dengan gluLookAt() pada sebuah obyek.
*/
#include <GL/glut.h>
#include <stdlib.h>
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity (); /* clear the matrix */
/* viewing transformation */
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glScalef (1.0, 2.0, 1.0); /* modeling transformation */
glutWireCube (1.0);
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
glMatrixMode (GL_MODELVIEW);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
Apr/090
Contoh Glubyte
GLubyte myInitial[] = {
0xff, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
0xff, 0x01, 0xff, 0x01, 0x00, 0x01, 0x01, 0x01,
0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01,
0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01,
0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01,
0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01,
0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01,
0xff, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

Eksekusi