Senin, 23 November 2015

Contoh Program Animasi 3D dengan C++

Pagi semuanya, masih melanjutkan tentang obrolan sebelumnya tentang program animasi 3D yang banyak bermanfaat untuk membuat game 3D. Kali ini ogut akan memberikan kembali contoh program animasi sederhana 3D.


Contoh program sebelumnya dapat Anda temukan di link ini. Dan bagi rekan-rekan yang ingin belajar tentang algoritma program ini sebaiknya baca artikel yang ogut tulis sebelumnya tentang teori animasi 3D.


Contoh program kali ini jika Anda jalankan akan menghasilkan tampilan seperti gambar di atas. Sebuah segitiga yang beranimasi sangat sederhana dan berubah bentuk.


Pada gambar di atas tampak sebuah segitiga dengan titik koordinat A1, A2 dan A3. Segitiga akan membesar dan bergerak ke kanan menjadi B1, B2 dan B3. Setelah itu segitiga akan berubah lagi dan bergerak ke arah C1, C2 dan C3.

Proses animasi menggunakan tiga buah vektor dan semuanya telah ogut terangkan di artikel teori animasi 3D.

Untuk membuat program ini pertama deklarasikan dahulu variable yang diperlukan

typedef struct
{
float X;
float Y;
float Z;
}VERTEX;

VERTEX A1, A2, A3, B1, B2, B3 ,C1, C2, C3 ;
VERTEX Disp_Anim1, Disp_Anim2, Disp_Anim3;

int i = 1;
int Loop_i = 0;
float Skala_Vektor = 0.001f;

Isi nilai titik koordinat segitiga

///////////LOAD DATA Vertex disini
A1.X = -1.5f; A1.Y = -1.0f; A1.Z = 1.0f;
A2.X = -1.0f; A2.Y = -1.0f; A2.Z = 1.0f;
A3.X = -1.25f; A3.Y = -0.5f; A3.Z = 1.0f;

B1.X = 2.0f; B1.Y = -2.0f; B1.Z = 1.0f;
B2.X = 3.0f; B2.Y = -2.0f; B2.Z = 1.0f;
B3.X = 2.5f; B3.Y = -1.0f; B3.Z = 1.0f;

C1.X = 0.0f; C1.Y = 2.0f; C1.Z = 1.0f;
C2.X = 2.5f; C2.Y = 2.0f; C2.Z = 1.0f;
C3.X = 0.5f; C3.Y = 3.0f; C3.Z = 1.0f;

Dan terakhir display animasi ke layar monitor

Loop_i++;
if ((Loop_i * Skala_Vektor) > 1.0f)
{
i++;
Loop_i = 1;
}

if (i > 3) 
i = 1;

//posisi dari A ke B
if (i == 1)
{
Disp_Anim1.X = A1.X + ((B1.X - A1.X) * Loop_i * Skala_Vektor);
Disp_Anim1.Y = A1.Y + ((B1.Y - A1.Y) * Loop_i * Skala_Vektor);
Disp_Anim1.Z = A1.Z + ((B1.Z - A1.Z) * Loop_i * Skala_Vektor);

Disp_Anim2.X = A2.X + ((B2.X - A2.X) * Loop_i * Skala_Vektor);
Disp_Anim2.Y = A2.Y + ((B2.Y - A2.Y) * Loop_i * Skala_Vektor);
Disp_Anim2.Z = A2.Z + ((B2.Z - A2.Z) * Loop_i * Skala_Vektor);

Disp_Anim3.X = A3.X + ((B3.X - A3.X) * Loop_i * Skala_Vektor);
Disp_Anim3.Y = A3.Y + ((B3.Y - A3.Y) * Loop_i * Skala_Vektor);
Disp_Anim3.Z = A3.Z + ((B3.Z - A3.Z) * Loop_i * Skala_Vektor);
}

//posisi dari B ke C
if (i == 2)
{
Disp_Anim1.X = B1.X + ((C1.X - B1.X) * Loop_i * Skala_Vektor);
Disp_Anim1.Y = B1.Y + ((C1.Y - B1.Y) * Loop_i * Skala_Vektor);
Disp_Anim1.Z = B1.Z + ((C1.Z - B1.Z) * Loop_i * Skala_Vektor);

Disp_Anim2.X = B2.X + ((C2.X - B2.X) * Loop_i * Skala_Vektor);
Disp_Anim2.Y = B2.Y + ((C2.Y - B2.Y) * Loop_i * Skala_Vektor);
Disp_Anim2.Z = B2.Z + ((C2.Z - B2.Z) * Loop_i * Skala_Vektor);

Disp_Anim3.X = B3.X + ((C3.X - B3.X) * Loop_i * Skala_Vektor);
Disp_Anim3.Y = B3.Y + ((C3.Y - B3.Y) * Loop_i * Skala_Vektor);
Disp_Anim3.Z = B3.Z + ((C3.Z - B3.Z) * Loop_i * Skala_Vektor);
}

//posisi dari C ke A
if (i == 3)
{
Disp_Anim1.X = C1.X + ((A1.X - C1.X) * Loop_i * Skala_Vektor);
Disp_Anim1.Y = C1.Y + ((A1.Y - C1.Y) * Loop_i * Skala_Vektor);
Disp_Anim1.Z = C1.Z + ((A1.Z - C1.Z) * Loop_i * Skala_Vektor);

Disp_Anim2.X = C2.X + ((A2.X - C2.X) * Loop_i * Skala_Vektor);
Disp_Anim2.Y = C2.Y + ((A2.Y - C2.Y) * Loop_i * Skala_Vektor);
Disp_Anim2.Z = C2.Z + ((A2.Z - C2.Z) * Loop_i * Skala_Vektor);

Disp_Anim3.X = C3.X + ((A3.X - C3.X) * Loop_i * Skala_Vektor);
Disp_Anim3.Y = C3.Y + ((A3.Y - C3.Y) * Loop_i * Skala_Vektor);
Disp_Anim3.Z = C3.Z + ((A3.Z - C3.Z) * Loop_i * Skala_Vektor);
}

//buat segitiga Disp_Anim
glBegin(GL_POLYGON);
glColor3f(1.0f, 1.0f, 0.0f);
glVertex3f(Disp_Anim1.X, Disp_Anim1.Y, Disp_Anim1.Z);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f(Disp_Anim2.X, Disp_Anim2.Y, Disp_Anim2.Z);
glColor3f(0.0f, 1.0f, 1.0f);
glVertex3f(Disp_Anim3.X, Disp_Anim3.Y, Disp_Anim3.Z);
glEnd();

Selesai sudah programnya, mudah bukan, selamat belajar dan sebentar lagi ogut akan memberikan contoh program yang lebih yahut, tunggu saja tanggal mainnya.

Salam Game 3D


Heriady
heriady.yoh@gmail.com




Artikel terkait
Program Animasi Game MoTer 3D dengan OpenGL

Membuat Animasi Hely 3D dengan OpenGL

Teori Animasi 3D dengan Vektor R3

Contoh Program Animasi 3D dengan OpenGL

Animasi dengan Vektor Translasi

Animasi dengan Vektor Translasi 2

Animasi 3D dengan Objek MD2

Matematika Vektor R3

Matematika Vektor R2