Pagi semuanya...setelah break beberapa waktu...sekarang saatnya kembali aktif nge-blog...
Setelah sebelumnya aku membahas tentang matematika transformasi geormetri khususnya tentang rotasi di koordinat cartesius 3D, kali ini aku akan memberikan contoh progam yang menggunakan rumus rotasi
Pada gambar di bawah Anda dapat melihat objek bola 3D yang dibuat dengan menggunakan rumus rotasi, ogut tidak akan menerangkan secara rinci karena prinsipnya sangat sederhana, tentukan sebuah vertex lalu rotasikan vertex tersebut hingga terbentuk bola.
Fungsi yang digunakan untuk membuat bola sebagai berikut.
void bola_KTB_Solid(float R)
{
int i, j;
int loop_Y, loop_Z;
Vertex bola_KTB[4];
double pi = 3.1415926535;
float temp_sudutZ1, temp_sudutZ2;
float temp_sudutY1, temp_sudutY2;
float d_sudut;
float awal_X, awal_Y, awal_Z;
float Temp_X, Temp_Y, Temp_Z;
Koordinat bola_KTB_TK[4];
float d_X_Koordinat, d_Y_Koordinat;
d_sudut = 10.0f;
awal_X = 0;
awal_Y = R;
awal_Z = 0;
temp_sudutZ1 = 0.0f;
temp_sudutZ2 = d_sudut;
temp_sudutY1 = 0.0f;
temp_sudutY2 = d_sudut;
loop_Z = 180 / (int)d_sudut;
loop_Y = 360 / (int)d_sudut;
/////teture koordinat
d_X_Koordinat = 1.0f / (float)loop_Y;
d_Y_Koordinat = 1.0f / (float)loop_Z;
glPushMatrix();
for (i = 1; i <= loop_Y; i++)
{
for (j = 1; j <= loop_Z; j++)
{
//array 0, titik awal di putar sumbu Z dgn sudut Z1, lalu di putar sumby Y dgn sudut Y1
bola_KTB[0].VX = (awal_X * (float)cos(temp_sudutZ1 / 180 * pi)) + (-1 * awal_Y * (float)sin(temp_sudutZ1 / 180 * pi));
bola_KTB[0].VY = (awal_X * (float)sin(temp_sudutZ1 / 180 * pi)) + (awal_Y * (float)cos(temp_sudutZ1 / 180 * pi));
bola_KTB[0].VZ = awal_Z;
Temp_X = bola_KTB[0].VX;
Temp_Y = bola_KTB[0].VY;
Temp_Z = bola_KTB[0].VZ;
bola_KTB[0].VX = (Temp_X * (float)cos(temp_sudutY1 / 180 * pi)) + (Temp_Z * (float)sin(temp_sudutY1 / 180 * pi));
bola_KTB[0].VY = Temp_Y;
bola_KTB[0].VZ = (-1 * Temp_X * (float)sin(temp_sudutY1 / 180 * pi)) + (Temp_Z * (float)cos(temp_sudutY1 / 180 * pi));
//array 1, titik awal di putar sumbu Z dgn sudut Z2, lalu di putar sumby Y dgn sudut Y1
bola_KTB[1].VX = (awal_X * (float)cos(temp_sudutZ2 / 180 * pi)) + (-1 * awal_Y * (float)sin(temp_sudutZ2 / 180 * pi));
bola_KTB[1].VY = (awal_X * (float)sin(temp_sudutZ2 / 180 * pi)) + (awal_Y * (float)cos(temp_sudutZ2 / 180 * pi));
bola_KTB[1].VZ = awal_Z;
Temp_X = bola_KTB[1].VX;
Temp_Y = bola_KTB[1].VY;
Temp_Z = bola_KTB[1].VZ;
bola_KTB[1].VX = (Temp_X * (float)cos(temp_sudutY1 / 180 * pi)) + (Temp_Z * (float)sin(temp_sudutY1 / 180 * pi));
bola_KTB[1].VY = Temp_Y;
bola_KTB[1].VZ = (-1 * Temp_X * (float)sin(temp_sudutY1 / 180 * pi)) + (Temp_Z * (float)cos(temp_sudutY1 / 180 * pi));
//array 2, titik awal di putar sumbu Z dgn sudut Z2, lalu di putar sumby Y dgn sudut Y2
bola_KTB[2].VX = (awal_X * (float)cos(temp_sudutZ2 / 180 * pi)) + (-1 * awal_Y * (float)sin(temp_sudutZ2 / 180 * pi));
bola_KTB[2].VY = (awal_X * (float)sin(temp_sudutZ2 / 180 * pi)) + (awal_Y * (float)cos(temp_sudutZ2 / 180 * pi));
bola_KTB[2].VZ = awal_Z;
Temp_X = bola_KTB[2].VX;
Temp_Y = bola_KTB[2].VY;
Temp_Z = bola_KTB[2].VZ;
bola_KTB[2].VX = (Temp_X * (float)cos(temp_sudutY2 / 180 * pi)) + (Temp_Z * (float)sin(temp_sudutY2 / 180 * pi));
bola_KTB[2].VY = Temp_Y;
bola_KTB[2].VZ = (-1 * Temp_X * (float)sin(temp_sudutY2 / 180 * pi)) + (Temp_Z * (float)cos(temp_sudutY2 / 180 * pi));
//array 3, titik awal di putar sumbu Z dgn sudut Z1, lalu di putar sumby Y dgn sudut Y2
bola_KTB[3].VX = (awal_X * (float)cos(temp_sudutZ1 / 180 * pi)) + (-1 * awal_Y * (float)sin(temp_sudutZ1 / 180 * pi));
bola_KTB[3].VY = (awal_X * (float)sin(temp_sudutZ1 / 180 * pi)) + (awal_Y * (float)cos(temp_sudutZ1 / 180 * pi));
bola_KTB[3].VZ = awal_Z;
Temp_X = bola_KTB[3].VX;
Temp_Y = bola_KTB[3].VY;
Temp_Z = bola_KTB[3].VZ;
bola_KTB[3].VX = (Temp_X * (float)cos(temp_sudutY2 / 180 * pi)) + (Temp_Z * (float)sin(temp_sudutY2 / 180 * pi));
bola_KTB[3].VY = Temp_Y;
bola_KTB[3].VZ = (-1 * Temp_X * (float)sin(temp_sudutY2 / 180 * pi)) + (Temp_Z * (float)cos(temp_sudutY2 / 180 * pi));
//perhitungan texture koordinat
bola_KTB_TK[0].X = (float)(i - 1) * d_X_Koordinat;
bola_KTB_TK[0].Y = 1 + ((float)(j - 1) * -d_Y_Koordinat);
bola_KTB_TK[1].X = (float)(i - 1) * d_X_Koordinat;
bola_KTB_TK[1].Y = 1 + ((float)j * -d_Y_Koordinat);
bola_KTB_TK[2].X = (float)i * d_X_Koordinat;
bola_KTB_TK[2].Y = 1 + ((float)j * -d_Y_Koordinat);
bola_KTB_TK[3].X = (float)i * d_X_Koordinat;
bola_KTB_TK[3].Y = 1 + ((float)(j - 1) * -d_Y_Koordinat);
//gambar bola
glBindTexture(GL_TEXTURE_2D, kulit_bola);
glBegin(GL_POLYGON);
glTexCoord2f(bola_KTB_TK[0].X, bola_KTB_TK[0].Y);
glVertex3f(bola_KTB[0].VX, bola_KTB[0].VY, bola_KTB[0].VZ);
glTexCoord2f(bola_KTB_TK[1].X, bola_KTB_TK[1].Y);
glVertex3f(bola_KTB[1].VX, bola_KTB[1].VY, bola_KTB[1].VZ);
glTexCoord2f(bola_KTB_TK[2].X, bola_KTB_TK[2].Y);
glVertex3f(bola_KTB[2].VX, bola_KTB[2].VY, bola_KTB[2].VZ);
glTexCoord2f(bola_KTB_TK[3].X, bola_KTB_TK[3].Y);
glVertex3f(bola_KTB[3].VX, bola_KTB[3].VY, bola_KTB[3].VZ);
glEnd();
temp_sudutZ1 = temp_sudutZ1 + d_sudut;
temp_sudutZ2 = temp_sudutZ2 + d_sudut;
}
temp_sudutZ1 = 0;
temp_sudutZ2 = d_sudut;
temp_sudutY1 = temp_sudutY1 + d_sudut;
temp_sudutY2 = temp_sudutY2 + d_sudut;
}
glPopMatrix();
}
Mudah kan, dengan contoh program di atas ogut berharap rekan-rekan bisa lebih berkreasi lagi, masih banyak trik dan program grafik / game yang dapat Anda buat, sekian dulu sampai jumpa di artikel berikutnya.
Salam Sukses Selalu
Heriady
heriady.yoh@gmail.com
Artikel terkait
Transformasi geometri (Rotasi di koordinat cartesius 3D)
|
|
I Love Math, Donut 3D
|
|
I Love Math, Botol 3D
|
|
I Love Math, Pipa Berongga 3D
|
Tidak ada komentar:
Posting Komentar