Diberdayakan oleh Blogger.

Senin, 01 Februari 2016

Contoh Program 3D ( Definisi 3D, Transformasi 3D, dan Proyeksi 3D)


#include <windows.h>
#include <glut.h>
#include <math.h>

void cylinder(float alas,float atas,float tinggi);
void kerucut(float ngisor, float nduwur, float dowo);
void blok(float tebal,int ratiol,int ratiop);

GLfloat  source_light[]={0.30,0.30,0.30,0.50};
double Loop,LoopAll=0;


void Mobil(void)
{
 glClearColor(1.0,9.0,1.0,0.0);  //blackground
 glShadeModel(GL_SMOOTH);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluPerspective(50.0,1.5,10.0,1000.0);

 glEnable  (GL_DEPTH_TEST);
 glPolygonMode   (GL_FRONT_AND_BACK,GL_FILL);
 glEnable  (GL_LIGHTING);
 glLightfv  (GL_LIGHT7,GL_DIFFUSE,source_light);
 glEnable  (GL_LIGHT7);
 glEnable  (GL_COLOR_MATERIAL);
 glColorMaterial (GL_FRONT_AND_BACK,GL_AMBIENT);

}



void display(void)
{

 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();

 /*
  Keterangan:
  glTranslatef : coba nilainya diubah2 untuk menempatkan pada posisi yang tepat dengan sumbu (x, y, z)
  glRotated : coba nilainya diubah2 untuk memutar objek agar sesuai dengan keinginan.
  cylinder: untuk membentuk model tabung

 */

  glTranslatef(0,0,-100);// besar kecilnya mobil

  Loop++;
     glRotatef(Loop,0.9,4.0,0.6);//mobil yang berotasi

 glPushMatrix();//body
 //glpushmatrix();
 glColor3f(0.0,0.0,9.0);
 blok(10, 3, 2);

 glTranslatef(0, 9, 0);
 blok(10, 3, 2);
 glTranslatef(10, -10,0);
 blok(10, 5.5, 2);
 glRotatef(-35, 0, 0, 15);
 glTranslatef(0, 7,0);
 blok(10, 2, 2);
 glTranslatef(2, 4.9,-2.5);
 glColor3f(0.9,0.9,0.9);// warna kaca
 blok(0.5, 20, 31);

 glRotatef(180, 45, -45, 0);
 //glTranslatef(0, 10,0);
 //blok(3, 2, 5);
 //cylinder(2,2,30);
 //glTranslatef(-10, -10,0);
 //glRotatef(90, 45,-45, 0);
 //cylinder(2,2,30);
 //glRotatef(90, -45, 90, 90);
 //blok(5, 3, 2);

 glPopMatrix();


 glPushMatrix();//roda
 glColor3f(0.0,0.0,0.0);
 glTranslatef(20, -8,-7);
 cylinder(5, 5,3);

 glColor3f(0.0,0.0,0.0);
 glTranslatef(-20, 8,7);
 glTranslatef(-5, -8,-7);
 cylinder(5, 5,3);

 glColor3f(0.0,0.0,0.0);
 glTranslatef(5, 8,7);
 glRotatef(180,0,180,0);
 glTranslatef(3,-8,-17);
 cylinder(5, 5,3);

 glColor3f(0.0,0.0,0.0);
 glTranslatef(-3,8,17);
 glTranslatef(-22,-8,-17);
 cylinder(5, 5,3);

 glColor3f(1.0,1.0,1.0);

 glRotatef(90,1,0,0);
 glTranslatef(8, 2.5,-15);
 blok(2, 4, 5);


 glRotatef(90,0,1,0);
 glTranslatef(0,-0.2,7);
 blok(2, 4, 8);


 glRotatef(0,0,0,0);
 glTranslatef(0,19.2,0);
 blok(2, 4, 8);

 glRotatef(90,0,1,0);
 glTranslatef(7, 0,-8);
 blok(2, 4, 5);

 glColor3f(9.9,9.9,0.0);//lampu
 glRotatef(90,0,1,0);
 glTranslatef(0,-3,20);
 cylinder(2, 2,3);

 glColor3f(9.9,9.9,0.0);//lampu
 glRotatef(0,0,0,0);
 glTranslatef(0,-12,0);
 cylinder(2, 2,3);

 glColor3f(0.0,0.0,0.0);//knalpot
 glRotatef(0,0,0,0);
 glTranslatef(0,0,-52);
 cylinder(1, 1,3);

 glColor3f(1.0,1.0,1.0);
 glRotatef(90,1,0,0);
 glTranslatef(-8,3.5,-12);
 blok(2, 4, 8);

 glColor3f(9.0,0.0,0.0);//lampu atas
 glRotatef(0,0,0,0);
 glTranslatef(-8,28,0);
 cylinder(1, 1,12);


 glPopMatrix();


 glFlush();
 glutSwapBuffers();

}

void kerucut(float ngisor, float nduwur, float dowo)
{
 float i;
 glPushMatrix();
 glTranslatef(1.0,0.0,ngisor/24);
 glutSolidCone(ngisor,0,32,4);
 for(i=0;i<=dowo;i+=ngisor/24)
 {
  glTranslatef(0.0,0.0,ngisor/24);
  glutSolidTorus(ngisor/4,ngisor-((i*(ngisor-nduwur))/dowo),16,16);
 }
 glTranslatef(0.0,0.0,ngisor/4);
 glutSolidCone(nduwur,0,20,1);
 glColor3f(0.,1.,1.);
 glPopMatrix();
}
void cylinder(float alas,float atas,float tinggi)
{
 float i;
 glPushMatrix();
 glTranslatef(1.0,0.0,-alas/8);
 glutSolidCone(alas,0,32,4);
 for(i=0;i<=tinggi;i+=alas/24)
 {
  glTranslatef(0.0,0.0,alas/24);
  glutSolidTorus(alas/4,alas-((i*(alas-atas))/tinggi),16,16);
 }
 glTranslatef(0.0,0.0,alas/4);
 glutSolidCone(atas,0,20,1);
 glColor3f(1.,0.,0.);
 glPopMatrix();
}

void blok(float tebal,int ratiol,int ratiop)
{
 float i,j;
 glPushMatrix();
 for(i=0;i<ratiop;i++)
 {
  glTranslatef(-(ratiol+1)*tebal/2,0.0,0.0);
  for(j=0;j<ratiol;j++)
  {
   glTranslatef(tebal,0.0,0.0);
   glutSolidCube(tebal);
  }
  glTranslatef(-(ratiol-1)*tebal/2,0.0,tebal);
 }
 glPopMatrix();
}
void tampil()
{
 display();
}


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


 glutInit(&argc,argv);
 glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);//|GLUT_DEPTH);
 glutInitWindowPosition(10,10);
 glutInitWindowSize(1000,700);
 glutCreateWindow("Mobil");
 glClearColor(0.5,0.5,0.0,0.0);
 glutDisplayFunc(display);
 gluOrtho2D(-320., 320., -240.0, 240.0);
 glutIdleFunc(tampil);
 Mobil();
 glutMainLoop();
 return(0);
} 

Rabu, 16 Desember 2015

Contoh Gambar Kreatif 2 : Pemrograman Grafik "Bintang Warna Warni " Hasil Karya Siswa

Setelah sebelumnya kita mempelajari tentang gambar televisi di artikel

Contoh Gambar Kreatif : Pemrograman Grafik "Televisi di Ruangan " Hasil Karya Siswa 

Siswa kreatif lainnya masih dalam pemrograman grafik lainnya yaitu gambar bintang warna-warni.
berikut screenshoot gambarnya :


Wulan Fahrunisa  - XII RPL3
SMK Manangga Pratama Kota Tasikmalaya

Berikut kode programnya :

#include <GL/glut.h>

void GambarPolyline(int x1,int y1,int x2,int y2,int x3, int y3,int x4, int y4,int x5, int y5,int x6, int y6,int x7, int y7,int x8,int y8, int x9, int y9, int x10, int y10){
glPointSize(4);
glBegin(GL_LINE_LOOP);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glVertex2i(x5,y5);
glVertex2i(x6,y6);
glVertex2i(x7,y7);
glVertex2i(x8,y8);
glVertex2i(x9,y9);
glVertex2i(x10,y10);
glEnd();
}


//draw area
void userdraw() {
static int tick=0;

//set warna (R,G,B)
glColor3f(1,0,0);

GambarPolyline(200,60,300,115,400,60,365,160,460,220,340,220,300,320,260,220,135,220,235,155);
glColor3f(1,1,0);
GambarPolyline(180,40,300,100,420,40,380,160,500,230,350,230,300,340,250,230,100,230,220,150);
glColor3f(0,1,0);
GambarPolyline(160,20,300,85,440,20,395,155,540,240,360,240,300,360,240,240,65,240,205,145);
glColor3f(0,0,1);
GambarPolyline(140,0,300,70,460,0,410,150,580,250,370,250,300,380,230,250,30,250,190,140);




}

void display(void){
//clear screen
glClear(GL_COLOR_BUFFER_BIT);
userdraw(); //jalanan userdraw()
glutSwapBuffers();
}
int main(int argc,char **argv){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowPosition(100,100); //posisi windownya di(100,100)
glutInitWindowSize(640,480); //set ukuran window jadi 640x480
glutCreateWindow("Bintang Colorfull"); //set judul app
glClearColor(0,0,0,0); //set warna backgroun(r,g,b,a)(range 0-1)
gluOrtho2D(0.,640.,0.,480.); //set area menggambar
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
return 0;

Contoh Gambar Kreatif : Pemrograman Grafik "Televisi di Ruangan " Hasil Karya Siswa

Siswa memang dituntut untuk lebih kreatif mengasah segala kemampuannya. Salah satunya adalah kreatifitas siswa dalam membuat sebuah gambar dalam mata pelajaran Pemrograman Grafik.

Menggambar dalam pemrograman grafik tidak semudah kita menggambar di design grafik. Karena untuk menggambar di dalam pemrograman grafik, kita harus memahami konsep library dan penggunaanya. Objek yang kita buat bisa saja menggunakan library yang berbeda-beda. Tidak hanya itu, kita juga harus bisa menyesuaikan koordinat-koordinat x,y (untuk dua dimensi) atau x,y,z (untuk tiga dimensi).

Dalam penggambaran 2D (Dua Dimensi) ini siswa membuat  sebuah objek dimana televisi terletak di sebuah meja, di dalam ruangan. berikut screen shoot gambar hasil dari pemrograman menggunakan Visual Studio C++ 2008.


Hasil Karya :

Firham Muladi - XII RPL 2
SMK Manangga Pratama Kota Tasikmalaya

Untuk coding programnya adalah sebagai berikut :

#include <stdlib.h>
#include <stdio.h>
#include <GL/glut.h>
void Gambarkotak1(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(0.7f,1.0f,0.7f);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotak1_2(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(0,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotak2(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(0,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotak3(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(1.0f,0.6f,0.0f);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotak4(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(1.0f,0.6f,0.0f);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotak5(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(0.7f,1.0f,0.7f);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}

void Gambarkotakmeja(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_LINE_LOOP);
glColor3f(1,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotakkaki1(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_LINE_LOOP);
glColor3f(1,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}

void Gambarkotakkaki2(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_LINE_LOOP);
glColor3f(1,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotakkaki3(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_LINE_LOOP);
glColor3f(1,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarkotakkaki4(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_LINE_LOOP);
glColor3f(1,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarjendela(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(1,1,1);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarjendela1(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(1,1,1);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarjendela2(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(1,1,1);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void Gambarjendela3(int x1, int y1,int x2, int y2,int x3, int y3, int x4, int y4){
glBegin(GL_POLYGON);
glColor3f(1,1,1);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
glVertex2i(x4,y4);
glEnd();
}
void antena (int x1, int y1,int x2, int y2,int x3, int y3){
glBegin(GL_LINE_STRIP);
glColor3f(0,0,0);
glVertex2i(x1,y1);
glVertex2i(x2,y2);
glVertex2i(x3,y3);
}

void userdraw(void) {
// Disini tempat untuk menggambar
Gambarjendela(300,200,300,150,230,150,230,200);
Gambarjendela1(210,200,210,150,140,150,140,200);
Gambarjendela2(300,130,300,80,230,80,230,130);
Gambarjendela3(210,130,210,80,140,80,140,130);
Gambarkotakkaki1(120,-200,120,-230,90,-230,90,-200);
Gambarkotakkaki2(-120,-200,-120,-230,-90,-230,-90,-200);
Gambarkotakkaki3(200,-50,200,-200,170,-200,170,-140);
Gambarkotakkaki4(-200,-50,-200,-200,-170,-200,-170,-140);
Gambarkotakmeja(200,-50,150,-200,-150,-200,-200,-50);
Gambarkotak1(120,-135,120,-160,-120,-160,-120,-135);
Gambarkotak1_2(110,-145,110,-150,100,-150,100,-145);
Gambarkotak2(120,-135,120,50,-120,50,-120,-135);
Gambarkotak3(120,-160,160,-120,160,100,120,50);
Gambarkotak4(-120,-160,-160,-120,-160,100,-120,50);
Gambarkotak5(160,100,-160,100,-120,50,120,50);
antena(20,150,0,100,-20,150);
glEnd();
}
void display(void) {
glClear( GL_COLOR_BUFFER_BIT);
userdraw();
glutSwapBuffers();
}
int main(int argc, char **argv){
glutInit(&argc,argv);
glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGB );
glutInitWindowPosition(100,100);
glutInitWindowSize(640,480);
glutCreateWindow ("FIRHAM | CREATIVE | STUDEN");
glClearColor(0,1,1,0);
gluOrtho2D(-320., 320., -240.0, 240.0);
glutIdleFunc(display); 
glutDisplayFunc(display);
int();
glutMainLoop();
return 0;
}


Sekian. Terimakasih untuk kreatifitasnya. Silahkan bagi yang ingin melengkapi dan memperbaiki untuk menjadikan karya ini semakin menarik.