OpenGL - Kubus 3D Bergambar






















 
Ini yang menurutku paling sulit. Untuk membuat yang seperti itu butuh 4 file, tidak seperti project-project sebelumnya yang hanya menggunakan 1 file main saja. Di sini ada 1 file gambar, yang nantinya akan dipajang di kubus. 
Ada file imageloader.cpp, fungsinya untuk mengimport file gambar. Lalu ada juga imageloader.h, isinya adalah fungsi-fungsi yang digunakan oleh imageloader.cpp. Kemudian tentu saja main.cpp, untuk memanggil imageloader.cpp dan juga membuat kubus itu sendiri..

Langsung saja kalau mau download project lengkapnya disini.

Dalam project itu sudah ada 4 file, termasuk fotoku :p. Untuk menggunakannya kita harus memasukan ke-4 file tadi ke satu project. Supaya lebih mudah dimasukan ke dalam 1 folder. Sebagai catatan file gambar atau foto sebaiknya menggunakan format bitmap ('.BMP'). Walaupun ukurannya relatif lebih besar dari format lain tapi susunan pixel nya lebih sederhana sehingga lebih mudah dibaca. 

Di dalam imageloader.cpp isinya adalah fungsi-fungsi untuk mengimport file gambar. Header nya ada di imageloader.h. 

Sekarang untuk membuat kubus, ada di main.cpp.
Dalam main.cpp ada variabel BOX_SIZE, merupakan panjang setiap sisi kubus. Setiap sisinya dibuat dengan fungsi 

glTexCoord2f(float, float);

Selengkapnya lihat di project.
Lalu untuk mengambil gambar, panggil fungsi yang ada di imageloader. Saat kita mengambil gambar, kita bermain dengan tekstur, jadi kita harus menambahkan 'GLuint loadTexture'. Contohnya:  

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 setelah mengambil gambar, untuk menampilkan gambar harus melakukan rendering terlebih dahulu. Dan jangan lupa menambahkan fungsi tambahan saat rendering agar hasilnya lebih menarik. 

void initRendering() {
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_NORMALIZE);
    glEnable(GL_COLOR_MATERIAL);
   
    Image* image = loadBMP("aku.bmp");
    _textureId = loadTexture(image);
    delete image;
}
 
Karena sudah malam dan saya mengantuk, penjelasan lebih lanjut besok saja (kalau ingat :p)...  

2 komentar: