LAPORAN GRAFIKA KOMPUTER OBJEK 3D

  

LAPORAN MODUL V

PRAKTIKUM GRAFIKA KOMPUTER

OBJEK 3D

  

Disusun untuk Memenuhi Matakuliah Praktikum Grafika Komputer

Yang Dibimbing oleh Bapak Heru Wahyu Herwanto

  

Disusun Oleh :

Ananda Putri Syaviri

130533608243

PTI Off B 2013

  

UNIVERSITAS NEGERI MALANG

FAKULTAS TEKNIK

JURUSAN TEKNIK ELEKTRO

PRODI PENDIDIKAN TEKNIK INFORMATIKA

APRIL 2015

Modul 5

  

“Object 3D”

  A. Kompetensi Dasar  Memahami Inisialisasi dunia 3D.

   Memahami Object 3D (Wired).  Memahami dasar menampilkan susunan objek 3D.

  B. Latihan

1. Buatlah sebuah fungsi yang dapat membuat persegi. tampilkan objek persegi tersebut

  pada layar dan berikan interaksi menggunakan keyboard untuk memindahkan posisi objek pada KOORDINAT Z (panah bawah untuk mendekat dan panah atas untukmenjauh). Tampilkan 2 screen shot kondisi ketika objek 2D jauh dan dekat. Dan tampilkan programnya (display function). Beri keterangan. Sintaks:

  #include <stdlib.h> #include <glut.h> float x=0, y=0, z=-10; int w = 500, h = 500; void drawQuad( int

  a, int b){ glColor3f(0,0,1); glBegin(GL_QUADS); glVertex2d(3, -3); glVertex2d(-3, -3); glVertex2d(-3, 3); glVertex2d(3, 3); glEnd();

  }

  void update( int value){

  glutPostRedisplay(); glutTimerFunc(50, update, 0); }

  void render( void )

  { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0,0,0,0); glLoadIdentity(); glTranslatef(x,y,z); drawQuad(1,1); glutSwapBuffers();

  }

  void reshape ( int w, int

  h) { glViewport (0, 0, (GLsizei)w, (GLsizei)h); glLoadIdentity(); gluPerspective (45, (GLfloat)w / (GLfloat)h, 1.0, 300.0); glMatrixMode (GL_MODELVIEW);

  }

  void init()

  { glClearColor (0.0f, 0.0f, 0.0f, 0.5f); glEnable (GL_DEPTH_TEST); glMatrixMode (GL_PROJECTION); glDepthFunc (GL_LEQUAL); glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

  }

  void mySpecialKeyboard( int key, int x, int y){ switch (key){ case GLUT_KEY_UP:

  z+=1;

  break ; case GLUT_KEY_DOWN:

  z-=1;

  break ;

  } }

  void main( int argc, char **argv) {

  glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow( "OBJEK 3D SYAVIRI" ); glutTimerFunc(50, update, 0); glutSpecialFunc(mySpecialKeyboard); init(); glutDisplayFunc(render); glutReshapeFunc (reshape); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutMainLoop();

  }

  Hasil Penjelasan Program diatas menggunakan fungsi myspecialKeyboard yang digunakan untuk mengubah bentuk dari objek yang dibangun pada program ini. Menggunakan tombol navigasi key up dan key down, key up untuk meresize ukuran objek menjadi lebih besar, sedangkan key down , merubah objke menjadi lebih kecil. Fungsi untuk mendeklarasikan agar objke yang dibangun dapat bergerak 3D adalah fungsi init dan reshape , yang nantinya pengaplikasiannya akan dipanggil pada fungsi utama, sehingga ketika program dijalankan , objek dapat bergerak.

2. Buatlah sebuah program yang dapat menganimasikan objek persegitersebut

  menggunakan tombol ("panah kiri" = rotasi berlawanan arah jarum jam pada sumbu x, "panah kanan" = rotasi searah jarum jam pada sumbu x, "panah atas" = rotasi searah jarum jam pada sumbu y, "panah bawah" = rotasi berlawanan arah jarum jam

  

pada sumbu y). Sajikan screenshot hasil interaksi yang menunjukkan animasi rotasi-

rotasi tersebut dan tulis program pada fungsi display. Beri keterangan. Sintaks:

  { glClearColor(0.0,0.0,0.0,1.0); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.,(GLdouble)w/(GLdouble)h,1.,300.); glMatrixMode(GL_MODELVIEW);

  tz += 3;

  case GLUT_KEY_UP : //deteksi tombol panah atas

  {

  switch (key)

  {

  void mySpecialKeyboard ( int key, int x, int y)

  }

  void init()

  #include <stdlib.h> #include <glut.h> int w = 480; int h = 480; int tz ; int x ; int y ; int z ; float sudut; void segiEmpat()

  }

  { glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, ( float ) w1/( float ) h1,1.0, 300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();

  void resize ( int w1, int h1)

  }

  { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glColor3f(0., 0., 1.); glTranslatef(0,0,tz); glRotatef(sudut,x,y,z); segiEmpat(); glutSwapBuffers();

  void renderScene( void )

  }

  { glBegin(GL_QUADS); glVertex2d(0.5, -0.5); glVertex2d(-0.5, -0.5); glVertex2d(-0.5, 0.5); glVertex2d(0.5, 0.5); glEnd();

  break ; case GLUT_KEY_DOWN : //deteksi tombol panah atas

  tz -= 3;

  break ;

  } }

  void myKeyboard( unsigned char key, int

  a, int

  b) {

  if (key == 'x' )

  { sudut += 20; x = 1; y =0; z =0;

  }

  else if (key == 'y' )

  { sudut += 20; x = 0; y =1; z =0;

  }

  else if (key == 'z' )

  { sudut += 20; x = 0; y =0; z =1;

  } }

  void update( int value)

  { glutPostRedisplay(); glutTimerFunc(50, update, 0);

  }

  void main( int argc, char **argv)

  { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(500,500); glutCreateWindow( "OBJEK 3D SYAVIRI" ); glutReshapeFunc(resize); init(); gluOrtho2D(-250.0, 250.0, -250, 250.0); glutDisplayFunc(renderScene); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(50,update,0); glutMainLoop();

  }

  Hasil:

  Penjelasan Program diatas hampir sama seperti program sebelumnya, hanya saja , pergerakan objke terlihat lebih dinamis, dapat berotasi dan bertranslasi pada sumbu x, y. Menggunakan specialkeyboard up, down, right, dan left akan menggerakkan objek berdasarkan sumbu x dan y. Searah dan berlawa nan jarumnya. Untuk pergerakannya 20 derajat tiap kali tombol keyboard x/y/z ditekan.

3. Latihan 3 - Buatlah sebuah program dengan menggunakan fungsi WireCube dimana

  tampilan wirecube dapat diputar (sumbu putar x, y, z) menggunakan tombol keyboard 'a' = rotasi berlawanan arah jarum jam pada sumbu x, 'd' = rotasi searah jarum jam pada sumbu x, 'w' = rotasi searah jarum jam pada sumbu y, 's' = rotasi berlawanan arah jarum jam pada sumbu y, 'e' = rotasi searah jarum jam pada sumbu z, 'q' = rotasi berlawanan arah jarum jam pada sumbu z. Sintaks:

  #include <stdlib.h> #include <glut.h> int w=400, h=400, z=-50; int x1=0, y1=0, sudut=0, z1=0; void renderScene( void ){

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1); glLoadIdentity(); glTranslatef(0,0,z); glRotatef(sudut,x1,y1,z1); glColor3f(0,0,1); glutWireCube(4); glutSwapBuffers(); }

  void resize( int w1, int h1){

  glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,( float ) w1/( float ) h1, 1.0,300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }

  void myKeyboard( unsigned char key, int x, int y){ if (key == 'x' ) {

  x1=1; y1=0; z1=0; sudut+=5; }

  else if (key == 'y' ) {

  y1=1; x1=0; z1=0; sudut+=-5; }

  else if (key == 'z' ) {

  y1=0; x1=0; z1=z; sudut+=5; } }

  void mySpecialKeyboard( int key, int x, int y){ switch (key){ case GLUT_KEY_UP : z-=5; break ; case GLUT_KEY_DOWN : z+=5; break ;

  } }

  void init(){

  glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0); glMatrixMode(GL_MODELVIEW); }

  void timer( int value){

  glutPostRedisplay(); glutTimerFunc(50,timer,0); }

  void main ( int argc, char **argv){

  glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow( "OBJEK 3D SYAVIRI" ); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutDisplayFunc(renderScene); glutReshapeFunc(resize); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(1,timer,0); init(); glutMainLoop(); }

  Hasil Penjelasan Pada program diatas tidak menggunakan fungsi drawQuads, seperti program- program sbeelumnya, tetapi menggunakan fungsi WireCube untuk membuat sebuah kerangka kubus 3D, sehingga tidak ada pendeklarasian penggunaan glvertex untuk membentuk sebuah objek. Menggunakan fungsi mykeyboard untuk memberikan pergerakan pada objek yang bergerak terhadap sumbu x, y dan z searah maupun berlawanan dengan arah jarum jam. Menggunakan fungsi myspecialKeyboard juga untuk pergerakan objke , key up dan key down.

4. Buatlah sebuah program dengan menggunakan fungsi WireSphere, dimana wire

  sphere dapat diputar pada sumbu z (searah dan berlawanan dengan jarum jam) dengan

  

keyboard(gunakan special key), ukuran wirespehre dapat diperbesar dengan tombol

panah atas, dan untuk memperkecil dengan tombol panah bawah, dan radius

wiresphere dapat diperbesar dengan tombol panah kanan, dan untuk memperkecil

menggunakan panah kiri. Sintaks:

  #include <stdlib.h> #include <glut.h> int w=400, h=400, z=-50; int x1=0, y1=0, sudut=0, z1=0; void renderScene( void ){

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1); glLoadIdentity(); glTranslatef(0,0,z); glRotatef(sudut,x1,y1,z1); glColor3f(0,0,1);

  // glutWireCube(4);

  glutWireSphere(50,50,50); glutSwapBuffers(); }

  void resize( int w1, int h1){

  glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,( float ) w1/( float ) h1, 1.0,300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }

  void myKeyboard( unsigned char key, int x, int y){ if (key == 'x' ) {

  x1=1; y1=0; z1=0; sudut+=5; }

  else if (key == 'y' ) {

  y1=1; x1=0; z1=0; sudut+=-5; }

  else if (key == 'z' ) {

  y1=0; x1=0; z1=z; sudut+=5; } }

  void mySpecialKeyboard( int key, int x, int y){ switch (key){ case GLUT_KEY_UP : z-=5; break ; case GLUT_KEY_DOWN : z+=5; break ;

  } } void init(){

  glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0); glMatrixMode(GL_MODELVIEW); }

  void timer( int value){

  glutPostRedisplay(); glutTimerFunc(50,timer,0); }

  void main ( int argc, char **argv){

  glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow( "OBJEK 3D SYAVIRI" ); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutDisplayFunc(renderScene); glutReshapeFunc(resize); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(1,timer,0); init(); glutMainLoop(); }

  Hasil

  Penjelasan Sama seperti program sebelumnya, tidak menggunakan fungsi drawQuad, melainkan menggunakan fungsi wireSphere yang merupakan kerangka 3D objek bola. Untuk membangun garis garis pada bola, menggunakan parameter pada fungsi wireSphere itu sendiri. Banyak- sedikitnya atau besar kecilnya objke tergantung pada parameter yang digunakan.

5. Latihan 5 - Buatlah sebuah program dengan menggunakan fungsi WireCone interaksi

  mengubah tinggi (panah atas, panah bawah) , alas (panah kanan, panah kiri), potongan(a,d). Sintaks : #include <stdlib.h> #include <glut.h> int w = 480; int h = 480; int z = -150; int sudut = 45; int sumbux, sumbuy, sumbuz; void wirecone ( void ){

  glColor3f(0,0,1); glLineWidth(2); glutWireCone(40., 80, 40,20); }

  void renderScene(){

  glClearColor(1,1,1,1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,z); glRotatef(sudut,sumbux,sumbuy,sumbuz); wirecone(); glutSwapBuffers(); }

  void resize( int w1, int h1){

  glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, ( float ) w1/( float ) h1, 1.0, 1300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }

  void init(){

  glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, ( float ) w/( float ) h, 1.0, 1300.0); glMatrixMode(GL_MODELVIEW); }

  void myKeyboard( unsigned char key, int x, int y){ if (key == 'a' ) z+=2; else if (key == 's' ) z-=2;

else if (key == 'x' ) {sudut +=2; sumbux = 1; sumbuy = 0; sumbuz = 0;}

else if (key == 'y' ) {sudut +=2; sumbux = 0; sumbuy = 1; sumbuz = 0;}

else if (key == 'z' ) {sudut +=2; sumbux = 0; sumbuy = 0; sumbuz = 1;}

  }

  void update ( int value){

  glutPostRedisplay(); glutTimerFunc(50, update, 0); }

  void main ( int argc, char **argv){

  glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(480,480); glutCreateWindow( "OBJEK 3D SYAVIRI" ); gluOrtho2D(-320.,320.,-320.,320.); glutTimerFunc(50, update, 0); glutDisplayFunc(renderScene); glutKeyboardFunc(myKeyboard); glutReshapeFunc(resize); init(); glutMainLoop();

  }

  Hasil:

  Penjelasan Program diatas menggunakan fungsi wirecone yang membentuk kerangka objek 3D kerucut. Parameter wirecone menunjukkan alas, tinggi, slice, sedangkan parameter terakhir langsung di inputkan tanpa deklarasi variabel. Untuk animasi 3D pada program ini , sama seperti program- program sebelumnya, scalef, translate, rotatef. Untuk scalef maka kerucut diatas akan semakin mengecil/membesar tergantung keyboard yang digunakan, sesuai pendeklarasian pada script. Untuk pendeklarasian pergerakan objke dideklarasikan pada fungsi myKeyboard, jika menggunakan keyboard tertentu sesuai yang dirumuskan, maka akan mengubah objek.

6. Buatlah sebuah program dengan menggunakan fungsi WireTorus, dengan interaksi

  mengubah diameter dalam (panah atas, panah bawah) , diameter luar (panah kanan, Sintaks : #include <stdlib.h> #include <glut.h> float x=0, y=0, z=-10; int w = 320, h = 320, i, j, k, l; int dlm = 2, lr=4, sisi=50, cincin=50; void objek( void ){

  glColor3f(0,0,1); glutWireTorus(1, 3, 50, 50); }

  {

  break ; case GLUT_KEY_DOWN:

  dlm+=1;

  void mySpecialKeyboard( int key, int x, int y){ switch (key){ case GLUT_KEY_UP:

  }

  { i+=10; j=1; k=1; }

  else if (key == 'c' )

  { i+=10; j=0; k=1; }

  else if (key == 'b' )

  { i+=10; j=1; k=0; }

  if (key == 'a' )

  void myKeyboard( unsigned char key, int x, int y)

  void update( int value){

  }

  return ;

  { glShadeModel (GL_SMOOTH); glClearColor (0.0f, 0.0f, 0.0f, 0.5f); glClearDepth (1.0f); glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL); glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

  void init()

  }

  h) { glViewport (0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective (60, (GLfloat)w / (GLfloat)h, 1.0, 100.0); glMatrixMode (GL_MODELVIEW);

  void reshape ( int w, int

  }

  { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1); glLoadIdentity(); glTranslatef(x,y,z); glRotatef(i,j,k,0); objek(); glutSwapBuffers();

  void myDisplay( void )

  glutPostRedisplay(); glutTimerFunc(100, update, 0); }

  dlm-=1; case GLUT_KEY_LEFT:

  lr-=1;

  break ; case GLUT_KEY_RIGHT:

  lr-=-1;

  break ;

  } }

  void main( int argc, char **argv) {

  glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow( "OBJEK 3D SYAVIRI" ); glutTimerFunc(50, update, 0); glutKeyboardFunc(myKeyboard); init(); glutDisplayFunc(myDisplay); glutReshapeFunc (reshape); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutMainLoop();

  }

  Hasil Penjelasan

Program diatas menggunakan fungsi wire torus yang membentuk kerangka donat.

Parameter dari wire torus menunjukkan diamater dalam, diameter luar, dan cincin

untuk jumlah ring. Menggunakan fungsi mykeyboard dan specialKeuboard untuk peregrakan objek. Untuk penggunaan parameter perlu diperhatika karena semakin sedikit ring maka bentuk tidak akan terlihat bulat/ menjadi bulat dan semakin kecil diameter dalamnya maka bentuknya tidak akan terlihat jelas.

7. Buatlah sebuah program dengan menggunakan fungsi WireTeapot, dengan interaksi

  {

  else if (key== 'z' )

  }

  { sumbu+=10; xx=0; yy=1; zz=0;

  else if (key== 'y' )

  }

  { sumbu+=10; xx=1; yy=0; zz=0;

  if (key== 'x' )

  rotasi pada 3 sumbu (searah dan berlawanan dengan arah jarum jam) dan mengubah ukurannya dengan tombol panah atas dan panah bawah. Sintaks :

  #include <stdlib.h> #include <glut.h> #include <stdio.h> float w=480, h=480; float n=-10; int sumbu=30; int xx=0, yy=0, zz=0, s=2; void display()

  }

  { glClearColor(1.0,1.0,1.0,1.0); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.,(GLdouble)w/(GLdouble)h,1.,300.); glMatrixMode(GL_MODELVIEW);

  void init()

  }

  { glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, ( float ) w1/( float ) h1, 1.0,300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();

  void resize( int w1, int h1)

  }

  { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,n); glRotatef(sumbu, xx,yy,zz); glColor3f(0,0,1); glutWireTeapot(s); glutSwapBuffers();

  void myKeyboard( unsigned char key, int x, int y)

  { sumbu+=10; xx=0; yy=0; zz=1;

  } }

  void Spesial( int key, int x, int y)

  {

  switch (key)

  {

  case GLUT_KEY_UP:

  s++;

  break ; case GLUT_KEY_DOWN:

  s--;

  break ;

  } }

  void timer( int value)

  { glutPostRedisplay(); glutTimerFunc(500,timer,0);

  }

  void main( int argc, char **argv)

  { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(w,h); glutCreateWindow( "OBJEK 3D SYAVIRI" ); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutDisplayFunc(display); glutReshapeFunc(resize); init(); glutTimerFunc(50,timer,0); glutKeyboardFunc(myKeyboard); glutSpecialFunc(Spesial); glutMainLoop();

  }

  Hasil

  Penjelasan Program diatas menggunakan fungsi WireTeapot yang membentuk kerangka teko. Untuk pergerakan objek menggunakan fungsi myKeyboard dan special, sehingga objek akan berotasi, bertranslasi atau membesar/mengecil sesuai tombol yang ditekan.

  Pergerakannya mengarah pada sumbu x dan y, kemudian arah putaran searah dan berlawanan arah jarum jam.

  C. Tugas Asistensi Buatlah Fungsi untuk membuat balok 3D, dengan parameter input fungsinya berupa

  1. panjang, lebar, dan tinggi yang dapat di ubah. Sajikan source code dan screenshotnya. Sintaks : #include <stdlib.h> #include <glut.h> int w=640, h=640, z=-30; int x1=0, y1=0, sudut=0, z1=0, skalaX=0, skalaY=0; void balok ( int

  a, int panjang, int lebar, int tinggi){ glPushMatrix(); glColor3f(0,1,0); //hijau glScalef(panjang,tinggi,lebar); glutWireCube(a); glPopMatrix();

  }

  void renderScene( void ){

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1,1,1,1); glLoadIdentity(); glTranslatef(0,0,z); glRotatef(sudut,x1,y1,z1); balok(3,4,3,3); glutSwapBuffers();

  }

  void resize( int w1, int h1){

  glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,( float ) w1/( float ) h1, 1.0,300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }

  void myKeyboard( unsigned char key, int x, int y){ if (key == 'q' ) z-=3; //zoom out else if (key == 'a' ) z+=3; //zoom in else if (key == 'z' ) { //counter clockwise

  x1=0; y1=0; z1=1; sudut+=30; }

  else if (key == 'w' ) { //clockwise

  y1=0; x1=0; z1=1; sudut-=30; } }

  void mySpecialKeyboard( int key, int x, int y){ switch (key){ case GLUT_KEY_UP:

  x1=1; y1=0; z1=0; sudut-=30;

  break ; case GLUT_KEY_DOWN:

  x1=1; y1=0; z1=0; sudut+=30;

  break ; case GLUT_KEY_RIGHT:

  x1=0; y1=1; z1=0; sudut+=30;

  break ; case GLUT_KEY_LEFT:

  x1=0; y1=1; z1=0; sudut-=30;

  break ;

  } }

  void init(){

  glClearColor(0,0,0,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,(GLdouble) w/(GLdouble) h, 1.0,300.0); glMatrixMode(GL_MODELVIEW); }

  void timer( int value){

  glutPostRedisplay(); glutTimerFunc(50,timer,0); }

  void main ( int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA); glutInitWindowPosition(320,240); glutInitWindowSize(w,h); glutCreateWindow( "ASISTENSI 1 SYAVIRI" ); gluOrtho2D(-w/2,w/2,-h/2,h/2); glutDisplayFunc(renderScene); glutReshapeFunc(resize); glutKeyboardFunc(myKeyboard); glutSpecialFunc(mySpecialKeyboard); glutTimerFunc(1,timer,0); init(); glutMainLoop(); }

  Hasil Penjelasan Untuk membuat program diatas, pendeklarasian pembentukan objek dan penggunaan animasi dideklarasikan pada fungsi renderScene. Program diatas menggunakan fungsi balok dengan parameter panjang lebar tinggi dan ketebalan garis. Terdapat pendeklarasian fungsi translate dan rotatef.

2. Buatlah Danbo 3 dimensi dengan interaksi memutar di 3 sumbu(searah dan berlawanan dengan arah jarum jam). Sajikan source code dan screenshotnya.

  Sintaks: #include <Windows.h> #include <iostream> #include <glut.h> #include <math.h> int a=640, b=320, c=-30; int a1=0, b1=0, sud=0, c1=0; void myKeyboard( unsigned char key, int x, int y) { if (key == 'a' ) c+=3; else if (key == 'b' ) c-=3; else if (key == 'c' ) {

  a1=0;b1=0;c1=1; sud+=15; }

  else if (key == 'd' ) {

  a1=1;b1=0;c1=0; sud+=15; } else if (key == 'e' ) {

  a1=1;b1=1;c1=0; sud+=15; }

  }

  void init() {

  glClearColor(1,1,1,1); glEnable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30., (GLdouble)a/(GLdouble)b, 1., 300.); glMatrixMode(GL_MODELVIEW);

  }

  void resize( int w1, int h1) {

  glViewport(0,0,w1,h1); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, ( float )w1/( float )h1, 1.0, 300.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity();

  }

  void Balok( double p, double l, double t) {

  glScalef(p, t, l); glutSolidCube(1); }

  void renderScene( void ) {

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glClearColor(0,0,1,0); //biru glTranslatef(0, 0, c); glRotatef(sud, a1, b1, c1); glPushMatrix(); //badan glColor3f(1, 0, 1); Balok(10, 6, 9); glPopMatrix(); glPushMatrix(); //kepala glTranslatef(0, 9.5, 0); glColor3f(0, 0.5, 1); Balok(15, 8, 10); glPopMatrix(); glPushMatrix(); //mata kiri glTranslatef(-2.2, 9.6, 4.1); glRotatef(90, 0, 1, 0); glColor3f(0, 0, 0); glutSolidSphere(1, 2, 30); glPopMatrix(); glPushMatrix(); //mata kanan glTranslatef(2.2, 9.6, 4.1); glRotatef(90, 0, 1, 0); glColor3f(0, 0, 0); glutSolidSphere(1, 2, 30); glPopMatrix(); glPushMatrix(); //hidung glTranslatef(0, 6.5, 4.1); glRotatef(90, 0, 1, 0); glRotatef(-90, 1, 0, 0); glColor3f(0, 0, 0); glutSolidCone(1.5, 2, 2, 2); glPopMatrix(); glPushMatrix(); //tangan kiri glTranslatef(-6.5, -0.5, 2.5); glRotatef(-45, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 10); glPopMatrix(); glPushMatrix(); //tangan kanan glTranslatef(6.5, -0.5, -2.5); glRotatef(45, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 10); glPopMatrix(); glPushMatrix(); //kaki kiri glTranslatef(-2, -4, -0.5); glRotatef(10, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 8); glPopMatrix(); glPushMatrix(); //kaki kiri glTranslatef(2, -4, 0.5); glRotatef(-10, 1, 0, 0); glColor3f(0, 0.5, 1); Balok(4, 4, 8); glPopMatrix(); glutSwapBuffers();

  }

  void timer( int value) {

  glutPostRedisplay(); glutTimerFunc(50,timer,0); }

  void main( int argc, char **argv) {

  glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(320,240); glutInitWindowSize(a,b); glutCreateWindow( "ASISTENSI 2 SYAVIRI" ); gluOrtho2D(-a/2, a/2, -b/2, b/2); glutDisplayFunc(renderScene); glutTimerFunc(50, timer, 0); glutKeyboardFunc(myKeyboard); glutReshapeFunc(resize); init(); glutMainLoop();

  }

  Hasil - Penjelasan Program diatas menggunakan fungsi balok yang didalamnya terdapat pendeklarasian penggunakan scalef dan solidcube yang didalamnya menggunakan parameter 1, yang dimaksudkan, nilai parameter pada setiap balok akan berbeda kesolidannya tergantung dari parameter yang membangun balok itu sendiri. Untuk membuat setiap anggota tubuh, menggunakan fungsi balok dengan parameter berbeda sesuai keinginan dan kebutuhan dari bentuk objek agar terlihat baik.

  D. Kesimpulan Objek 3D merupakan perputaran dari 3 sumbu. -

  • Fungsi wire Cube digunakan untuk membuat kerangka balok secara otomatis. Fungsi wiresphere untuk membuat kerangka bola. Fungsi wire teapot untuk membuat kerangka teko. Fungsi wire torus untuk membuat kerangka donat. Fungsi wire cone utnuk membuat kerangka kerucut.
  • Gunakan fungsi glutSolid untuk dapat membuat objek menjadi berisi atau membuat objek dengan full.

  • Untuk pergerakan objek menggunakan fungsi rotate, dapat diatur jika ingin membuat objek berputar searah atau berlawanan jarum jam. Untuk putaran searah jarum jam maka maka deklarasikan sudutnya dengan menggunakan operator (+) atau increment,

    sedangkan jika ingin berlawanan maka menggunakan operator (-) atau decrement.

  • Untuk dapat memudahkan dalam penulisan parameter, maka dapat menggunakan pedneklarasian variable, sehingga tidak perlu menuliskan secara berulang, cukup menuliskan variable yang digunakan, maka nantinya program akan memanggil nilai dari variable tersebut.

  E. Daftar Pustaka Modul V praktikum Grafika Komputer, Jurusan Teknik Elektro, Fakultas Teknik,Universitas Negri Malang.