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
Jumat, 30 November 2012
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 ..
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 :)
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
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.
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
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 *.
Langganan:
Postingan (Atom)