Petir Cakrawala Background

Untuk membuat background bergulung seperti video berikut ini

VIDEO YOUTUBE

Perhatikan gambar di bawah ini.


Di sebelah kiri adalah koordinat layar yang ogut bagi menjadi 4(empat) bagian sama besar. Sedangkan di sebelah kiri adalah tekstur koordinat background yang ogut bagi menjadi 6(enam) bagian sama besar.

Agar latar belakang game tampak bergulung seperti video yang Anda lihat di atas maka


koordinat layar ogut isi dengan tekstur seperti tampak gambar di atas. Jika Anda perhatikan dari a sampai e maka tekstur yang ogut isi merupakan bagian dari tekstur background yang sudah ogut bagi menjadi 6 bagian sama besar.

Dengan menggunakan cara di atas maka latar belakang game akan terus bergulung, sehingga tercipta animasi yang sedap dipandang mata.

Deklarasi struct dan variabel
Struct dan variabel yang harus dideklarasikan untuk menampung titik koordinat layar dan texture koordinat adalah:

typedef struct
{
double V_Y1;
double V_Y2;
int Index_TK;
}Vertex_BG;

typedef struct
{
double TK_Y1;
double TK_Y2;
}TK_BG;

//BACKGROUND
const int total_V_BG = 300;
const int total_TK_BG = total_V_BG * 2;

Vertex_BG V_BG[total_V_BG];
TK_BG Text_BG[total_TK_BG];

Mengisi nilai koordinat dan texture koordinat
Variabel-variabel yang telah kita siapkan harus diisi sebelum ditampilkan ke layar.

void Create_Vertex_BG(Vertex_BG Array_BG[], int total_ar, double Ymax_P)
{
int i;

//tinggi layar dibagi dengan total array
//untuk membagi layar menjadi bagian yang
//sama besar secara horisontal
double beda_VBG = (Ymax_P * 2.0 / (double)total_ar);

for (i = 0; i < total_ar; i++)
{
Array_BG[i].V_Y1 = -Ymax_P + (beda_VBG * (double)i);
Array_BG[i].V_Y2 = -Ymax_P + (beda_VBG * (double)(i + 1));

Array_BG[i].Index_TK = i;
}

}

void Create_TK_BG(TK_BG Array_TK_BG[], int total_ar)
{
int i;

//tinggi texture = 1
//dibagi dengan banyaknya array.
double beda_TK_BG = 1.0 / (double)total_ar;

for (i = 0; i < total_ar; i++)
{
Array_TK_BG[i].TK_Y1 = beda_TK_BG * (double)i;
Array_TK_BG[i].TK_Y2 = beda_TK_BG * (double)(i + 1);
}

}

Tampilkan background
Untuk menampilkan background perlu diperhatikan nilai dari Index_TK yang harus terus diperbaharui.

void Display_Scrolling_BG(Vertex_BG Array_BG[], TK_BG Array_TK_BG[],
int total_ar_V, int total_ar_TK,
unsigned int texture_BG, double Xmax_P)
{
int i;

glBindTexture(GL_TEXTURE_2D, texture_BG);

for (i = 0; i < total_ar_V; i++)
{
glBegin(GL_POLYGON);
glTexCoord2d(0.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y1);
glVertex2d(-Xmax_P, Array_BG[i].V_Y1);

glTexCoord2d(1.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y1);
glVertex2d(Xmax_P, Array_BG[i].V_Y1);

glTexCoord2d(1.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y2);
glVertex2d(Xmax_P, Array_BG[i].V_Y2);

glTexCoord2d(0.0, Array_TK_BG[Array_BG[i].Index_TK].TK_Y2);
glVertex2d(-Xmax_P, Array_BG[i].V_Y2);
glEnd();

//perbaharui nilai Index TK
//supaya tercipta animasi
//background berjalan/bergulung
Array_BG[i].Index_TK++;

if (Array_BG[i].Index_TK >= total_ar_TK)
Array_BG[i].Index_TK = 0;
}
}

Tidak ada komentar:

Posting Komentar