Pada materi OpenGL kali ini, saya akan menunjukkan bagaimana cara membuat gambar bergerak di OpenGL menggunakan bahasa pemrograman C++, pergerakan atau perpindahan gambar di OpenGL ini dapat juga di Sebut Tweening, karna Tweening adalah mengubah bentuk, ukuran, atau tempat dalam artian disini adalah titik kordinat, dengan motion inbeetween (gerak perubahan antara awal dan akhir)
Sebelum saya menunjukkan dan menjelaskan koding yang di gunakan di dalam membuat gambar bergerak di OpenGL ini, disini saya memberikan sedikit informasi bahwa software yang saya gunakan untuk menulis dan menjalankan bahasa pemrograman C++ di OpenGL yaitu software bernama Codeblocks, yang mana software ini memiliki fungsi dan kegunaan yang sama dengan yang biasa di ajarkan di perkuliahan yaitu visual C++, atau visual studio, untuk menulis dan menjalankan bahasa pemrograman C++ dalam belajar OpenGL.
Alasan kenapa saya menggunakan Codeblocks adalah karna laptop saya sedikit bermasalah ketika melakukan pemasangan glut pada Visual C++ atau Visual Studio, bagi yang tertarik atau memiliki masalah yang sama, Codeblocks dapat di pelajari dengan melihat di bagian menu blog ini yaitu OpenGL dan Dasar OpenGL.
Baiklah langsung saja kita akan membuat gambar bergerak menggunakan OpenGL, yang pertama saya sudah menyiapkan titik kordinat dan juga sebuah gambar mobil sederhana dengan OpenGL.
pada gambar titik kordinat di atas, dapat dilihat disana saya membuat dua buah poligon berwarna merah dan biru, dan juga dua buah lingkaran berwarna putih sebagai rodanya.
bagi kalian yang belum mengerti tentang lingkaran dengan OpenGL dapat di pelajari dulu di blog ini silahkan menuju Cara Membuat Lingkaran di Opengl
untuk warna di dalam OpenGL juga dapat di pelajari di sini pada Koding Warna di Opengl
Bagi teman-teman yang Ingin dibantu dalam pembuatan tugas OpenGL silahkan DM ke Instagram @mahara.kata atau silahkan hubungi admin di menu HUBUNGI ADMIN
Setelah gambar selesai dibuat dengan OpenGL, selanjutnya tinggal menambahkan koding gerak untuk OpenGL yang mana dapat dilihat di bawah ini:
Deklarasikan variabel gerak otomatis di bagian atas
//deklarasi gerakan otomatis
int gerak = 0;
bool atas = true;
Letakkan perintah Gerak di dalam Void Display atau lebih tepatnya di bagian sebelum pembuatan gambar Objek (diatas koding gambar mobil)
//perintah animasi
glPushMatrix();
glTranslatef( gerak, 0,0);
//contoh disini digambar sebuah mobil
Selanjutnya letakkan Koding dibawah ini di dalam Void Display di bagian bawah gambar Objek dibawah glFlush();
glPopMatrix();
Selanjutnya buatlah sebuah Void timer
void timer(int t)
{
if (atas){
gerak += 1;
} else {
gerak -= 1;
}
if (gerak > 20) {
atas = false;
} else if(gerak < -20){
atas = true;
}
glutPostRedisplay();
//kecepatan mobil berbanding terbalik
//semakin besar nilai glutTimerFunc maka akan semakin pelan gerakannya
//ubahlah angka 50 agar mengerti
glutTimerFunc(50,timer,0);
Terakhir di int main atau void main, panggil void timer
glutTimerFunc(1,timer,0);
Untuk koding lengkap membuat gambar bergerak di OpenGL, dapat di lihat di bawah ini :
#include<gl/freeglut.h>//glut terpasang di codeblocks
#include<gl/glut.h>//glut visual C++
//catatan untuk di atas kalian bisa hapus salah satu
//atau gunakan sesuai dimana glut.h kalian terpasang
#include<windows.h>
#include<math.h>//agar terpasang rumus matematika untuk lingkaran
//deklarasi pembuatan lingkaran
const double PI = 3.142857143;
int i,radius,jumlah_titik,x_tengah,y_tengah;
//deklarasi gerakan otomatis
int gerak = 0;
bool atas = true;
void display (void)
{
glClear(GL_COLOR_BUFFER_BIT);
//perintah untuk gerakan
glPushMatrix();
glTranslatef( gerak, 0,0);
//Untuk radius titik variabel disini saya menggunakan range 1-9 bukan 0.0-0.9
//silahkan sesualkan saja bila hasilnya sangat kecil atau sangat besar
//untuk mengatur besar kecil tampilan dapat diseting kembali di void main
glBegin(GL_POLYGON);// biru
glColor3f(0,0,1);
glVertex2f(-5,0);
glVertex2f(5,0);
glVertex2f(5,2);
glVertex2f(-4,2);
glVertex2f(-5,1);
glEnd();
glBegin(GL_POLYGON);// merah
glColor3f(1,0,0);
glVertex2f(-2,2);
glVertex2f(4,2);
glVertex2f(3,4);
glVertex2f(0,4);
glEnd();
glBegin(GL_POLYGON);//menggunakan polygon agar dalam lingkaran terisi
glColor3f(1,1,1);//warna lingkaran
radius = 100; //radius 1 dikali 100
jumlah_titik = 60;//semakin banyak titik semakin halus lingkarannya
x_tengah = -300;//tengah lingkaran -0.3 dikali 100
y_tengah = 0;//tengah lingkaran
for (i=0;i<=360;i++)
{
float sudut=i*(2*PI/jumlah_titik);
float x=x_tengah+radius*cos (sudut);
float y=y_tengah+radius*sin (sudut);
glVertex2f(x/100,y/100);
}
glEnd();
glBegin(GL_POLYGON);//menggunakan polygon agar dalam lingkaran terisi
glColor3f(1,1,1);//warna lingkaran
radius = 100; //radius 1 dikali 100
jumlah_titik = 60;//semakin banyak titik semakin halus lingkarannya
x_tengah = 300;//tengah lingkaran 3 dikali 100
y_tengah = 0;//tengah lingkaran
for (i=0;i<=360;i++)
{
float sudut=i*(2*PI/jumlah_titik);
float x=x_tengah+radius*cos (sudut);
float y=y_tengah+radius*sin (sudut);
glVertex2f(x/100,y/100);
}
glEnd();
glFlush();//untuk membersihkan
glPopMatrix();
}
void timer(int t)
{
if (atas){
gerak += 1;
} else {
gerak -= 1;
}
if (gerak > 20) {
atas = false;
} else if(gerak < -20){
atas = true;
}
glutPostRedisplay();
//kecepatan mobil berbanding terbalik
//semakin besar nilai glutTimerFunc jika ingin mengganti kecepatan
//silahkan ganti angka 50 di bawah ini, misal 100 mobil akan semakin lambat
//dibawah 50 mobil akan semakin cepat
glutTimerFunc(50,timer,0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(700,700);
glutCreateWindow("Mobil Bergerak");
//background warna putih
glutDisplayFunc(display);
gluOrtho2D(-20, 20, -20, 20);//mengatur tampilan agar terlihat seluruhnya
glutTimerFunc(1,timer,0);
glutMainLoop();
}
Baca Juga :
baiklah mungkin sampai disini dahulu pembajasan kali ini, lebih dan kurangnya saya mohon maaf, terimakasih telah berkunjung, bila teman teman butuh bantuan atau jasa dalam pembuatan OpenGL ini silahkan hubungi admin, dengan menekan menu HUBUNGI ADMIN , terimakasih
Komentar