Tampilkan postingan dengan label tugas. Tampilkan semua postingan
Tampilkan postingan dengan label tugas. Tampilkan semua postingan

Tugas Membuat Kipas Angin Menggunakan Opengl

  • Membuat kipas Angin dengan menggunakan Opengl menjadi salah satu mata kuliah komputer grafik di kampus-kampus terutama yang mengambil jurusan Teknik Informatika. pada kesempatan ini saya akan memberikan cheat tentang tugas komputer grafik bagaimana cara membuat kipas Angin dengan menggunakan OpenGL. 
  • Dalam membuat kipas angin, terdapat beberapa komponen yang digunakan dalam bentuk 3 dimensi. seperti pada kasus ini saya menggunakan: gambar tabung yang digunakan sebagai tombol kipas angin, gambar donat (torus) yang sudah saya modifikasi bentuknya sehingga bentuknya menjadi seperti baling-baling yang akan digunakan sebagai kipasnya, dan ada juga 2 buah cube (kubus) yang digunakan sebagai tiang penyangga kipas dan juga sebagai alas kipas dan yang terakhir ada gambar sphere (bola) yang digunakan sebagai rumah dari baling-baling. 
  • Tentunya pada mata kuliah komputer grafik, untuk membuat kipas angin tersebut terdiri dari beberapa fungsi yang dibuat, seperti fungsi untuk memutar baling-baling pada kipas angin tersebut dengan menggunakan fungsi timer (jika ingin mengetahui tentang fungsi timer sederhana maka bisa dilihat di postingan sebelumnya tentang membuat ayunan 2d dengan menggunakan fungsi timer opengl ) , kemudian ada juga fungsi yang digunakan sebagai pencahayaan / lighting. fungsi tersebut digunakan untuk memberi efek cahaya pada objek sehingga terlihat nyata dengan adanya sisi gelap terang. terdapat juga fungsi mouse yang digunakan apabila objek tersebut akan digerakan dengan cara menekan tombol pada mouse, pada program yang saya berikan ini terdapat 1 fungsi tombol mouse dimana saat Anda menekan tombol klik kiri pada mouse maka rumah kipas angin akan bergerak 90 derajat ke arah kanan. terdapat juga fungsi dari keyboard seperti:

  1. menekan angka 1 maka akan memutar baling-baling kipas angin dengan kecepatan renda
  2. menekan angka 2 makan akan memberi perintah memutar kipas angin dengan kecepatan sedang
  3. menekan  angka 3 pada keyboard maka akan membuat kipas angin berputar dengan kecepatan maksimum
  4. menekan angka 0 pada keyboard maka akan menghentikan kipas yang sedang berputar
  5. pada saat menekan simbol "+" (tambah), maka akan membuat kipas angin memiliki banyak titik sudut, begitu juga sebaliknya saat menekan simbol "-" pada keyboard Anda.
Pasti sudah tidak sabar untuk melihat bagaimana skrip yang digunakan untuk membuatnya kan? untuk itu langsung saja saya berikan skripnya dibawah ini.

Membuat ayunan 2D dengan fungsi Timer opengl

Pada postingan ini saya akan membagikan tugas yang saya buat di kampus saya pada mata kuliah komputer grafik. timer merupakan salah satu materi yang terdapat pada mata kuliah komputer grafik dimana Anda harus membuat gambar dan pada gambar yang telah dibuat diharuskan untuk melakukan pergerakan dengan menggunakan timer. seperti contoh : sebuah perahu yang berlayar dari arah kanan ke kiri atau sebaliknya, sebuah efek hujan, atau bahkan sebuah ayunan seperti yang akan saya bagikan pada Anda. 

karena ayunan yang digambarkan hanya berbentuk 2D jadi mohon dimaklumi yah jiga timer untuk ayunan bergerak dibuat bergerak dari kanan ke kiri. (untuk Anda yang ingin mengetahui gambar 3D bisa melihat postingan tentang Membuat Kamera 3D dengan opengl )

untuk membuat gambar seperti diatas, pertama saya menggambarkan 3 buah persegi yang akan digunakan sebagai tiang ayunan, kemudian 2 buah garis lurus yang akan digunakan untuk tali ayunan dan yang terakhir yaitu 1 persegi sebagai tempat duduk ayunan.

berikut cheat untuk Anda yang ingin membuat ayunan dengan menggunakan opengl. Untuk Anda yang sudah mengetahui tentang skrip dibawah maka ini cukup membantu Anda yang kebingungan dalam menentukan gambar apa yang harus dibuat untuk sebuah efek timer di opengl, sementara untuk Anda yang belum mengerti efek dibawah ini maka Anda harus banyak belajar lagi sama seperti saya hehehe.


#include 
#include 
#include 
int x =0;
int zputer=0;
int zbalik=45;
int ujung,r=0;

//membuat fungsi timer yang akan digunakan untuk menggerakan ayunan
void timer(int value)
{

    if(r <= 45 && ujung==0 )
    {
        x++;
        if  (x==45)
            {
                ujung=1;
            }
    }
    else if(ujung == 1 && r>-45)
    {
        x--;
        if(x==-45)
        {
            ujung=0;
        }
    }

    glutPostRedisplay();
    glutTimerFunc(25,timer,0);
}
//fungsi yang digunanak untuk menggambar tiang ayunan
void draw()
{
    glBegin(GL_QUADS);
    glClear(GL_COLOR_BUFFER_BIT);
    glVertex2d(-250,0);
    glVertex2d(-250,-400);
    glVertex2d(-200,-400);
    glVertex2d(-200,0);

    glVertex2d(200,0);
    glVertex2d(200,-400);
    glVertex2d(250,-400);
    glVertex2d(250,0);

    glVertex2d(-250,-70);
    glVertex2d(-250,0);
    glVertex2d(250,0);
    glVertex2d(250,-70);

    glEnd();
}
//fungsi yang digunanak untuk menggambar tempat duduk ayunan
void draw123() { glBegin(GL_QUADS); glClear(GL_COLOR_BUFFER_BIT); glVertex2d(-50,-300); glVertex2d(-50,-270); glVertex2d(50,-270); glVertex2d(50,-300); glEnd();
//GL_LINES digunakan untuk menggambar garis yang akan digunakan sebagai tali ayunan
    glBegin(GL_LINES);
    glClear(GL_COLOR_BUFFER_BIT);
    glVertex2f(-20,-300);
    glVertex2f(-20,-30);

    glVertex2f(20,-300);
    glVertex2f(20,-30);

    glEnd();
}

    void display2()
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glPushMatrix();
        glRotated(x,0,0,1);
        draw123();
        glPopMatrix();
        draw();

        glFlush();
    }


int main(int argc, char**argv)
{
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(480,480);
    glutCreateWindow("animasi by timer");
    gluOrtho2D(-500.0,500.0,-500.0,500.0);
    glutDisplayFunc(display2);

    glutTimerFunc(100,timer,0); //memanggil fungsi timer yang dibuat
    glutMainLoop();
    return 0;
}

Sekian postingan yang saya buat jika ada kurang dan lebihnya mimin mohon maaf, semoga postingan diatas dapat bermanfaat untuk Anda yang sedang mencari contoh membuat bentuk 2 dimensi dengan menggunakan timer di opengl. Jika postingan ini bermanfaat jangan lupa di share ya..

Membuat Kamera 3D dengan opengl

Pada kesempatan kali ini saya akan memberi sedikit jalan keluar untuk Anda yang bingung dengan cara membuat gambar 3D dengan menggunakan opengl. untuk Anda yang sudah mengetahui mengenai opengl tetapi masih bingung mengenai objek 3D yang ada pada opengl, maka disini akan saya hadirkan beberapa objek 3D yang tersedia dalam opengl

http://mydailycheats.blogspot.com/

Pada gambar di atas adalah beberapa tipe dari opengl yang sudah disiapkan dan tinggal dipanggil fungsinya. untuk nama-nama sesuai gambar diatas yaitu ada :
1. Sphere : yaitu gambar dengan bentuk bola
2. Octahedron: gambar berwarna segitiga
3. Cone : gambar kerucut
4. Tetrahedron
5. Torus : gambar dengan bentuk seperti donat
6. Teapot : gambar seperti benda untuk menyimpan teh
7. Cube : berbentuk kubus
8. Dodecahedron : seperti berbentuk bebatuan

Untuk membuat kamera pastinya Anda harus mengkombinasikan bentuk-bentuk diatas untuk bisa menyatu menjadi sebuah bentuk kamera. ditambah lagi untuk membuat gambar dalam bentuk 3D pastinya juga dibutuhkan sebuah rotasi gambar yang digunakan untuk membuat gambar Anda menjadi lebih keren karena bisa dirotas.
Untuk lebih jelasnya berikut 



#include <windows.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>
int c,d,xx,yy;
float w=480,h=480;
float sudut=0,sx=0,sy=0,sz=0,dalam=10,luar=25,sides=25,rings=25;
float ax=45,ay=45,az=45;

int x =0;
int ujung2;
int ujung,r=0;
int i;

void setMaterial()
{
    //set properties of surfaces material
    GLfloat mat_ambient[] = {1.0f,1.0f,1.0f,1.0f}; // ada 4 jenis material yang dipakai, dengan kombinasi warna tertentu
    GLfloat mat_diffuse[] = {0.6f,0.6f,0.6f,1.0f};
    GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
    GLfloat mat_shininess[] = {50.0f};
    glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
    glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
    glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
    glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
}

void setMaterial2()
{
    //set properties of surfaces material
    GLfloat mat_ambient[] = {1.0f,0.7f,0.7f,1.0f}; // ada 4 jenis material yang dipakai, dengan kombinasi warna tertentu
    GLfloat mat_diffuse[] = {1.6f,0.6f,0.6f,1.0f};
    GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
    GLfloat mat_shininess[] = {50.0f};
    glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
    glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
    glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
    glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
}

void materiallensa()
{
    //set properties of surfaces material
    GLfloat mat_ambient[] = {0.0f,0.0f,1.0f,1.0f}; // ada 4 jenis material yang dipakai, dengan kombinasi warna tertentu
    GLfloat mat_diffuse[] = {0.6f,0.6f,0.6f,1.0f};
    GLfloat mat_specular[] = {1.0f,1.0f,1.0f,1.0f};
    GLfloat mat_shininess[] = {50.0f};
    glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient);
    glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
    glMaterialfv(GL_FRONT,GL_SPECULAR,mat_specular);
    glMaterialfv(GL_FRONT,GL_SHININESS,mat_shininess);
}

void setLighting()
{
    //set light sources
    GLfloat lightIntensity[] = {0.7f,0.7f,0.7f,1.0f};//mensetting pencahayaan
    GLfloat light_position[] = {2.0f,6.0f,3.0f,0.0f};
    glLightfv(GL_LIGHT0,GL_DIFFUSE,lightIntensity);
    glLightfv(GL_LIGHT0,GL_POSITION,light_position);
}

void torus()
{
    glColor3f(0,0,1);
    glutSolidTorus(dalam,luar,sides,rings);// fungsi disamping adalah bentuk pendeklarasian fungsi “Torus”
}

    void torus2()
{
    glColor3f(0,0,1);
    glutSolidTorus(dalam,13,sides,rings);// fungsi disamping adalah bentuk pendeklarasian fungsi “Torus”
}
void sphere()
{
 //   glColor3d(1,1,1);
    glutSolidSphere(20, 25, 25);
}

void teapot()
{
    glColor3d(1,0,0);
    glutSolidTeapot(5);
}

void kerucut()
{
    glColor3d(1,0,0);
    glutSolidCone(dalam,luar,20,20);
}

void tabung()
{
    glClear(GL_COLOR_BUFFER_BIT);
    //glColor3f(1,1,1);
    glBegin(GL_POLYGON);
    GLUquadricObj *obj = gluNewQuadric();
    gluCylinder(obj, 20, 20, 20, 50, 50);

    glEnd();
}

void tbl()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_POLYGON);
    GLUquadricObj *obj = gluNewQuadric();
    gluCylinder(obj, 3, 3, 5, 50, 50);
    glEnd();
}

void tblaraha()
{
    glRotated(90,0,90,0);
    glTranslated(-33,-5,-5);
    glScaled(3,1.5,0.7);
    glutSolidCube(10);
}

void tblarahb()
{
    glRotated(90,0,90,0);
    glTranslated(0,-3,0);
    glScaled(4,0.5,0.2);
    glutSolidCube(10);
}

void cube()
{
        //menggambar kubus dan transformasi tarnslasi ke titik 0.5 0.5 0.5 dan skala 1 1 1
        //glPushMatrix();
        glTranslated(0.5,0.5,-15);//cube
        glScaled(3.0,2.0,0.7);
        glutSolidCube(30.0);
        //glPopMatrix();
}

void layar()
{
        //menggambar kubus dan transformasi tarnslasi ke titik 0.5 0.5 0.5 dan skala 1 1 1
        //glPushMatrix();
        glTranslated(0.5,0.5,-15);
        glScaled(1.5,1.5,0.7);
        glutSolidCube(10);
        //glPopMatrix();
}

void display(){
    setMaterial();
    materiallensa();
    setLighting();


    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0,0,-250);
    glRotatef(sudut,sx,sy,sz);

    glPushMatrix();
    setMaterial();
        glRotatef(sudut,ax,ay,az);
        glTranslatef(0,0,-10);
        tabung();
        glTranslatef(-20,35,-5);
        glRotated(90,90,0,0);
        tbl();
        tblaraha();
        //glRotated(90,180,0,0);

            glPushMatrix();
            setMaterial();
            tblarahb();
            glPopMatrix();

    glPopMatrix();

    glPushMatrix();
    setMaterial2();
        glRotatef(sudut,ax,ay,az);
        glTranslatef(c,d,0);
        cube();
    materiallensa();
    glTranslatef(5,0,0);
        layar();
        //cube();
    glPopMatrix();


    glPushMatrix();
    materiallensa();
        glRotatef(sudut,ax,ay,az);
        glTranslatef(0,0,0);
        sphere();
    glPopMatrix();

    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 init(){
    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);
}
void myKeyboard(unsigned char key, int x, int y){
if(key=='x'){
    sx=1;
    sy=0;
    sz=0;
    sudut+=10;
}
else if(key=='y'){
    sx=0;
    sy=1;
    sz=0;
    sudut+=10;
}
else if(key=='z'){
    sx=0;
    sy=0;
    sz=1;
    sudut+=10;
}
else if(key=='a'){
    xx+=-4; yy+=0;
}
else if(key=='d'){
    xx+=4; yy+=0;
}
else if(key=='w'){
    xx+=0; yy+=4;
}
else if(key=='s'){
    xx+=0; yy+=-4;
}
}

void mySpecialKeyboard(int key, int x, int y){
    switch(key){
    case GLUT_KEY_LEFT : c+=-4; d+=0; break;
    case GLUT_KEY_RIGHT : c+=4; d+=0; break;
    case GLUT_KEY_UP : c+=0; d+=4; break;
    case GLUT_KEY_DOWN : c+=0; d+=-4; break;
}}

void update(int value){
    glutPostRedisplay();
    glutTimerFunc(50,update,0);
}
int main(int argc, char **argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(w,h);
    glutCreateWindow("Objek 3D");
    glutDisplayFunc(display);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glutReshapeFunc(resize);
    init();
    glutTimerFunc(50,update,0);
    glutSpecialFunc(mySpecialKeyboard);
    glutKeyboardFunc(myKeyboard);

    glutMainLoop();
    return 0;
}