Jumat, 30 November 2012

Membuat Kubus 3 Dimensi

Membuat Kubus 3D dan menempelkan objek foto pada bidang kubus.

-Pertama, kita membutuhkan imageLoader.cpp dan imageLoad.h (sudah d sediakan oleh dosen).
-Pada file main.cpp kita akan membuat coding bagaimana kita membuat kubus terlebih dahulu, dan objek foto kita tempelkan pada bidang tersebut.
untuk teksturnya menggunakan coding seperti ini :

GLuint loadTexture(Image* image) {
GLuint textureId;
glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height, 0, GL_RGB, GL_UNSIGNED_BYTE, image->pixels);
return textureId;  }
kemudian masukkan di fungsi initRendering,,
void initRendering() {
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
Image* image = loadBMP(“antonl.bmp”);
_textureId = loadTexture(image);
delete image;  }
 dan masukkan objek fotonya di dalam fungsi loadTexture,
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -20.0f);
GLfloat ambientLight[] = {0.3f, 0.3f, 0.3f, 1.0f};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);
GLfloat lightColor[] = {0.7f, 0.7f, 0.7f, 1.0f};
GLfloat lightPos[] = {-2 * BOX_SIZE, BOX_SIZE, 4 * BOX_SIZE, 1.0f};
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
glRotatef(-_angle, 1.0f, 1.0f, 0.0f);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _textureId);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
//glBegin(GL_QUADS);
//Sisi atas
glTexCoord2f(0.0f, 0.0f);
glNormal3f(0.0, 1.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
//Sisi bawah
glTexCoord2f(0.0f, 0.0f);
glNormal3f(0.0, -1.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
//Sisi kiri
glNormal3f(-1.0, 0.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
//Sisi kanan
glNormal3f(1.0, 0.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
//glEnd();
//Sisi depan
glNormal3f(0.0, 0.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, BOX_SIZE / 2);
//Sisi belakang
glNormal3f(0.0, 0.0f, -1.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(-BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, BOX_SIZE / 2, -BOX_SIZE / 2);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(BOX_SIZE / 2, -BOX_SIZE / 2, -BOX_SIZE / 2);
glEnd();
glDisable(GL_TEXTURE_2D);
glutSwapBuffers();  }

dan fungsi terakhir ini d gunakan untuk memutar kubus,,
oid update(int value) {
_angle += 1.0f;
if (_angle > 360) {
_angle -= 360;
}
glutPostRedisplay();
glutTimerFunc(25, update, 0); }

untuk lebih jelasnya langsung saja saya kasih projectnya dan bisa mencobanya..
download





Membuat Segitiga Bertingkat

kali ini saya ingin memberitahukan cara membuat segitiga bertingkat menggunakan DevC++.
HasilNya seperti gambar dibawah ini :
saya membuatnya secara manual, satu persatu...
untuk codingnya dapat di download disini ..

Kamis, 15 November 2012

Membuat Rumah Sederhana 3D

Kali ini saya membuat Rumah Sederhana 3 Dimensi menggunakan DevC++.
Output gambarnya seperti dibawah ini :




Untuk codingnya dapat di download di Sini

Terima Kasih :)

Selasa, 16 Oktober 2012

Menghitung Titik Potong Garis

Cara menghitung titik potong garis yang berwarna merah, menggunakan rumus matematika.
Rumusnya seperti ini :
m1 = (yb-ya)/(xb-xa);
m2 = (yd-yc)/(xd-xc);
c1 = ya - (m1*xa);
c2 = yc - (m2*xc);
x=(c2-c1)/(m1-m2);
y=(m1*x)+c1;

dimana memasukkan nilai x dan y dari titik garis ab dan garis cd adalah :
xa = 50,    ya = 70
xb = 200,  yb = 250
xc = 250,  yc = 50
xd = 50,    yd = 350

Hasilnya Akan Seperti Gambar Di Bawah Ini :



Rabu, 03 Oktober 2012

HEXAGON menggunakan OpenGL

Sekarang ada tugas lagi membuat HEXAGON obat nyamuk menggunakan OpenGL. Untuk membuat HEXAGON berbeda dengan membuat Rumah2D, disini kita perlu menggunakan header #include math.h pada DevC++ karena kita akan menggunakan rumus seperti cos dan sin.
Gambarnya seperti dibawah ini :

untuk penjelasan coding, rumus yang digunakan seperti ini :
glBegin(GL_LINE_STRIP);
    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex2f(10.0, 0.0);
    glVertex2f(10 * cos(2*3.14159265 * 1/6), 10 * sin(2*3.14159265*1/6));
    glVertex2f(10 * cos(2*3.14159265 * 2/6), 10 * sin(2*3.14159265*2/6));
    glVertex2f(10 * cos(2*3.14159265 * 3/6), 10 * sin(2*3.14159265*3/6));
    glVertex2f(10 * cos(2*3.14159265 * 4/6), 10 * sin(2*3.14159265*4/6));
    glVertex2f(10 * cos(2*3.14159265 * 5/6), 10 * sin(2*3.14159265*5/6));
    glVertex2f(11 * cos(2*3.14159265 * 6/6), 11 * sin(2*3.14159265*6/6));
    glEnd();
dimana 10 adalah jari-jari lingkarannya, 1-6 itu variabel loopingya dan 6 adalah jumlah sudutnya.
rumusnya tidak melakukan looping tetapi dengan cara manual yaitu dengan menggunakan rumus tersebut sebanyak 10 kali agar dapat menghasilkan gambar diatas dan membentuk seperti obat nyamuk.


Jumat, 28 September 2012

Membuat Rumah 2D Lewat OpenGL

Hasil di bawah ini dibuat menggunakan DevC++ lewat OpenGL.


Source Code'nya dapat diunduh di SINI.

Senin, 06 Agustus 2012

Prosedur


Instruksi Dasar
n  Tiga jenis instruksi di bawah ini akan dipakai untuk merencanakan program dasar:
      print* à mencetak satu * dan membuat kursor maju satu langkah. (print* = p*)
      prints à mencetak satu space kosong dan maju satu langkah. (prints = ps)
      NL à return ke baris berikutnya
n  Contoh        
NL; p*;p*;p*
NL; p*;p*;p*  (Program 3.1)
NL; p*;p*;p*
Disederhanakan:
NL; p*;p*;p* (Program 3.2)
Program 3.2; Program 3.2; Program 3.2 (Program 3.3)

Prosedur
n  Kesulitan dalam mengingat urutan sekumpulan instruksi menghasilkan pemikiran untuk memberi nama (label) kepada kumpulan instruksi tersebut.
n  Cara seperti ini disebut membuat prosedur.
n  Dengan prosedur tidak perlu lagi menyebutkan sekuens dari kumpulan instruksi tersebut tetapi cukup dengan menyebutkan nama (label) prosedurnya saja.
n  Prosedur adalah suatu program yang digunakan oleh program lain sama seperti sebuah instruksi.
Prosedur sebagai Instruksi

Notasi Definisi dan Pemanggilan Prosedur
n  Suatu prosedur akan selalu dimulai dengan kata “def” dan berakhir dengan enddef.
n  Contoh:
                def threestars() = NL;p*;p*;p* enddef
n  Nama prosedur adalah threestars .
      Arti prosedur diberikan oleh NL;p*;p*;p*
      Tanda () menunjukkan bahwa bilamana prosedur ini dipanggil, tak ada parameter yang dibutuhkan untuk mengeksekusinya.
n  Contoh
      untuk Program 3.3. dapat ditulis
                threestars();threestars();threestars(); (Program 3.8)
      def H() = t1();t1();t2();t1() enddef
                def O() = t2();t1();t1();t2() enddef;
                def t1() = NL;p*;ps;ps;ps;p* enddef  (Program 3.9)
                def t2() = NL; p*;p*;p*;p*;p* enddef
                O(); NL; H() akan menghasilkan huruf O di atas H.
Definisi dalam Definisi
n  Suatu prosedur dapat berisi definisi dari suatu prosedur lain.
n  Contoh: untuk mencetak pola OH tiga kali dengan blank memisahkan tiap pola
n  Program dapat dibuat dengan:
                Program 3.9;NL;Program 3.9;NL;Program 3.9
                (Program 3.10)
n  Contoh:
                Program 3.11:
                def pattern() =
                                def H() = t1();t1();t2();t1() enddef
                                def O() = t2();t1();t1();t2() enddef;
                                def t1() = NL;p*;ps;ps;ps; p* enddef
                                def t2() = NL;p*;p*;p*;p*;p* enddef
                                O(); NL; H()
                enddef
                pattern(); NL;pattern();NL;pattern()
n  Cara lain:
                def H() = t1();t1();t2();t1();t1() enddef
                def O() = t2();t1();t1();t1();t2() enddef
                def t1() = NL;p*;ps;ps;ps;p* enddef           
       def t2() = NL;p*;p*;p*;p*;p* enddef
                (Program 3.12)
                def pattern()= O(); NL; H() enddef
                pattern();NL;pattern();NL;pattern()
Prosedur dengan Parameter
n  def p() = p* enddef
                p(); p(); p()                         (Program 3.13)
n  Arti dari Program 3.13 adalah tercetaknya tiga *.
n  Tetapi dengan nama yang sama dapat didefinisikan p() sbb:
                def p() = NL;p*;p*;p* enddef
                p();p();p()                           (Program 3.14)
                di mana arti dari Program 3.14 adalah mencetak sembilan *.