balls Nurul Azizah Ihsan Satya Rama Resti sintya Ervina Sigit Wibowo Rahim Rasyid h ttp :// w w w . tu lisa n ku . co m
Pendahuluan Balls adalah sebuah animasi yang dibuat
menggunakan C++ dan OpenGL Beberapa bola yang selalu bergerak terus
menerus dan tidak akan keluar dari windows yang disediakan
h ttp :// w w w . tu lisa n ku . co m
Source Code http://openglc2.sourceforge.net/programs/balls
.zip Program Balls ini terdiri dari 3 buah file yaitu balls.cpp tgaload.cpp tgaload.h
Yang akan dibahas pada presentasi ini hanya
file balls.cpp
h ttp :// w w w . tu lisa n ku . co m
balls.cpp File balls.cpp mempunyai 1 buah class dan
beberapa fungsi yaitu : class BallClass void init ( void ) void display(void) void reshape(int w, int h) void idle_func (void) int main(int argc, char** argv)
h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- class BallClass class BallClass { public: float inc; float yposo,vyo,ypos,times,ay; float xposo,vxo,xpos,ax; float rotate; BallClass () { rotate=5; inc=.02; yposo=2,vyo=0,ypos=2,times=0,ay=-9.8; xposo=-2,xpos=2,ax=0; int temp =random(20); vxo=temp+1; }
h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- init function void init ( void ) {
tgaGetColorEXT(); //mengatur warna pada bagian yang ada di material dan jenis pencahayaannya. //pada sintaks ini yang diberikan pencahayaan adalah permukaan depan dengan cahaya ambient dan diffuse glColorMaterial ( GL_FRONT, GL_AMBIENT_AND_DIFFUSE ); //mengaktifkan fungsi GL_TEXTURE_2D //jika aktif, two-dimensional texturing is performed glEnable ( GL_TEXTURE_2D ); h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- init function //set pixel storage modes //Specifies the alignment requirements for the start of
each pixel row in memory. The allowable values are 1 (byte-alignment), 2 (rows aligned to even-numbered bytes), 4 (word-alignment), and 8 (rows start on double-word boundaries). glPixelStorei ( GL_UNPACK_ALIGNMENT, 1 );
//glGenTextures: generate texture names. //1 menunjukkan banyaknya nama texture yang dibuat //0 menunjukkan tempat penyimpanan texture glGenTextures ( 1, 0 );
}
h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- init function //mengikat gambar dari texture ke objek yang texture enable glBindTexture ( GL_TEXTURE_2D, 0 ); tgaLoadImage ( "fire.tga", &fire_image, TGA_FREE );
}
//mengaktifkan fungsi GL_CULL_FACE //jika diaktifkan, maka menghilangkan polygon berdasarkan koordinat yang berkelok pada window glEnable ( GL_CULL_FACE ); //membersihkan nilai buffer dan memberikan nilai baru pada buffer glClearColor ( 0, 0.0, 1.0, 0.0 ); //memindahkan objek sesuai koordinat x,y, zoom glTranslatef ( 0.0, 0.0, zoom ); h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- display function void display(void) {
for (ballnum=0;ballnum < totalball; ballnum++) { d+=0.4; glPushMatrix ( ); //mengikat gambar dari texture ke objek yang texture enable glBindTexture ( GL_TEXTURE_2D, 0 ); //membuat objek quadric yang baru GLUquadricObj* q = gluNewQuadric ( );
h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- display function //menentukan cara penggambaran objek quadric. //Quadrics yang diberikan dengan poligon primitif. Poligon
digambar counterclokwish dengan normalnya gluQuadricDrawStyle( q, GLU_FILL );
//menentukan bentuk normal dari quadric //1 normal yang dihasilkan dari tiap verteks yang ada pada quadric gluQuadricNormals ( q, GLU_SMOOTH ); //menentukan apakah texture diberikan kepada quadric //GL_TRUE menandakan texture diberikan kepada quadric gluQuadricTexture ( q, GL_TRUE );
);
//memindahkan objek sesuai koordinat glTranslated ( ball[ballnum].xpos, ball[ballnum].ypos, -11.0 h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- display function //melakukan rotasi pada objek glRotated(ball[ballnum].rotate,1,1,1);
}
//menggambar sebuah sphere (bola) gluSphere ( q, .3, 20, 20 ); //menghapus quadric gluDeleteQuadric ( q ); glPopMatrix ( ); } //mengaktifkan fungsi BLEND yang ada pada openGL //jika aktif, makan nilai warna RGBA yang masuk akan dicampur (blend) dengan nilai yang ada di buffer glEnable ( GL_BLEND ); glPopMatrix ( ); glutSwapBuffers ( ); glClear ( GL_COLOR_BUFFER_BIT );
h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- idle function void idle_func (void) { for (ballnum=0;ballnum < totalball; ballnum++) { ball[ballnum].rotate+=((rand()%10)); ball[ballnum].times+=ball[ballnum].inc; ball[ballnum].ypos=ball[ballnum].yposo +
(ball[ballnum].vyo*ball[ballnum].times) + (.5*ball[ballnum].ay* (ball[ballnum].times*ball[ballnum].times)); ball[ballnum].xpos=ball[ballnum].xposo + (ball[ballnum].vxo*ball[ballnum].times) + (.5*ball[ballnum].ax*(ball[ballnum].times*ball[ballnum].times)); if ((ball[ballnum].ypos < -4.2)) { ball[ballnum].vyo=random(15); ball[ballnum].times=0; ball[ballnum].yposo=ball[ballnum].ypos; ball[ballnum].xposo=ball[ballnum].xpos; }
h ttp :// w w w . tu lisa n ku . co m
balls.cpp -- idle function else if ((ball[ballnum].ypos> 4.2)) { ball[ballnum].ay=1*ball[ballnum].ay;ball[ballnum].vyo=-1 *random(10);ball[ballnum].times=0; ball[ballnum].yposo=ball[ballnum].ypos; ball[ballnum].xposo=ball[ballnum].xpos; } else if ((ball[ballnum].xpos> 5.5)) { ball[ballnum].vxo=-1-random(20);ball[ballnum].times=0; ball[ballnum].xposo=ball[ballnum].xpos;ball[ballnum].yposo=ball[ballnum].ypos; } else if ((ball[ballnum].xpos< -5.5)) { ball[ballnum].vxo=random(20);ball[ballnum].times=0; ball[ballnum].xposo=ball[ballnum].xpos;ball[ballnum].yposo=ball[ballnum].ypos; }
} glutPostRedisplay(); }
h ttp :// w w w . tu lisa n ku . co m
Rangkuman BallClass digunakan sebagai template untuk
membuat bola yang diinginkan. Menggunakan objek quadric untuk membuat bola dan menerapkan fungsi texture. Perintah glutPostRedisplay() yang menyebabkan bola terlihat bergerak terus secara acak. Akhirnya selesai juga presentasi ini. Terima kasih
h ttp :// w w w . tu lisa n ku . co m