Langsung ke konten utama

OpenGL : Kipas Angin

buat temen-temen yang nyari code script program OpenGL untuk objeck Kipas Angin, berikut kode nya. . 

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

void cylinder(float rbase,float rtop,float height);
void blok(float tebal,int ratiol,int ratiop);
void bilah (float r_inner,float r_outer,float tebal,int batang);

int screen_width=800;
int screen_height=600;
int button_up=0,button_down=0;
int Turn=0;

double rotation_y=0,rotation_y_plus=-15,direction;
double Rhead=0,Rheadplus=0;
double rotate_All=0,All_plus=0;
double Angguk=0,Anggukplus=0;
double press=0,pressplus,pressplus1=180,pressplus2=0,pressplus3=0,pressplus4=0,pressplus5=0;

bool Toleh=true,Tolehpress=true;
bool RightTurn=true;
bool speed1=true,speed2=false,speed3=false,speed4=false,speed5=false;

//GLfloat ambient_light[]={0.3,0.3,0.45,1.0};
GLfloat ambient_light[]={0.0,0.0,0.45,1.0};
//GLfloat  source_light[]={0.9,0.8,0.8,1.0};
GLfloat  source_light[]={0.8,0.8,0.8,1.0};
//GLfloat     light_pos[]={7.0,0.0,1.0,1.0};
GLfloat     light_pos[]={5.0,0.0,6.0,1.0};

void init(void)
{
glClearColor(1.0,1.0,1.0,0.0);  //putih
glClearColor(0.0,0.0,0.4,0.0); //back color
glShadeModel(GL_SMOOTH);
glViewport(0,0,screen_width,screen_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)screen_width/(GLfloat)screen_height,1.0f,1000.0f);

glEnable (GL_DEPTH_TEST);
glPolygonMode   (GL_FRONT_AND_BACK,GL_FILL);
glEnable (GL_LIGHTING);
glLightModelfv  (GL_LIGHT_MODEL_AMBIENT,ambient_light);
glLightfv (GL_LIGHT0,GL_DIFFUSE,source_light);
glLightfv (GL_LIGHT0,GL_POSITION,light_pos);
glEnable (GL_LIGHT0);
glEnable (GL_COLOR_MATERIAL);
glColorMaterial (GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
}

void resize(int width,int height)
{
screen_width=width;
screen_height=height;

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glViewport(0,0,screen_width,screen_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f,(GLfloat)screen_width/(GLfloat)screen_height,1.0f,1000.0f);

glutPostRedisplay();
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glTranslatef(0.0,-15,-70);
glPushMatrix();
 glRotatef(270,1.0,0.0,0.0);
 rotate_All+=All_plus;
 glRotatef(rotate_All,0.0,0.0,1.0);
 cylinder(2.5,1.5,16);
 cylinder(2.5,2.5,6);
   glPushMatrix();
   glTranslatef(0.0,0.0,14);
glRotatef(90,0.0,1.0,0.0);
Angguk+=Anggukplus;
glRotatef(Angguk,0.0,0.0,1.0);
        Anggukplus=0; 
 glPushMatrix();
 glRotatef(270,0.0,1.0,0.0);
 glTranslatef(0.0,0.0,1);
 cylinder(0.5,1,4);
 glPopMatrix();
glutSolidTorus(1.5,2,6,16);
glTranslatef(0.0,0.0,-2);
cylinder(1,1,4.3);
glTranslatef(0.0,0.0,2);
glRotatef(270,0.0,1.0,0.0);
     glPushMatrix();
     glTranslatef(0.0,0.0,10);
     glRotatef(90,1.0,0.0,0.0);
 //turn left-right for fan head  10/9/2003
 if ( Toleh==true)   
 {
 if(Turn >= 60)      // max degrees right
RightTurn =false;
 if(Turn <=-60)  // max degrees left
RightTurn =true;
 if(RightTurn == true )
 {
 Rheadplus++;
 Turn++;
 }
 else
 {
 Rheadplus--;
 Turn--;
 }
 }
     Rhead=Rhead+Rheadplus;
     glRotatef(Rhead,0.0,1.0,0.0);
 Rheadplus=0;
     // end turn left-right for fan head
 glTranslatef(0.0,0.0,-3.0);
     cylinder(4,4,6);
 cylinder(1,0.5,15);
 glRotatef(270,1.0,0.0,0.0);
 if(Tolehpress==true)  // press down turn left-right head button
 cylinder(0.3,0.5,6);
 else // pull up turn left-right head button
 cylinder(0.3,0.5,7);
 glRotatef(90,1.0,0.0,0.0);
     glPushMatrix();
   glTranslatef(0.0,0.0,11);
   glutWireTorus(5,7,10,64);
   glutSolidTorus(0.5,12,10,64);
   rotation_y+=rotation_y_plus;
   if(rotation_y>359)rotation_y=0;
   glRotatef(rotation_y,0.0,0.0,1.0);
   bilah(3,10,3,5); // bilah(inner radius, outer radius, thickness, qty bilah)
     glPopMatrix();
   glPopMatrix();
 glPopMatrix();
 glRotatef(90,1.0,0.0,0.0);
 glTranslatef(0.0,-1.0,-4);
 blok(2,7,10);

 // speed selection   11/9/2003
 glTranslatef(-6,1,14);
 glRotatef(270,1.0,0.0,0.0);
 glTranslatef(2.0,0.0,0.0);
 glPushMatrix();
 glRotatef(pressplus5,1.0,0.0,0.0);
 blok(0.5,2,2);
 glPopMatrix();
 glTranslatef(2.0,0.0,0.0);
 glPushMatrix();
 glRotatef(pressplus1,1.0,0.0,0.0);
 blok(0.5,2,2);
 glPopMatrix();
 glTranslatef(2.0,0.0,0.0);
 glPushMatrix();
 glRotatef(pressplus2,1.0,0.0,0.0);
 blok(0.5,2,2);
 glPopMatrix();
 glTranslatef(2.0,0.0,0.0);
 glPushMatrix();
 glRotatef(pressplus3,1.0,0.0,0.0);
 blok(0.5,2,2);
 glPopMatrix();
 glTranslatef(2.0,0.0,0.0);
 glPushMatrix();
 glRotatef(pressplus4,1.0,0.0,0.0);
 blok(0.5,2,2);
 glPopMatrix();
 pressplus5=0;
 //end of speed selection
glPopMatrix();

glFlush();
glutSwapBuffers();
}


void cylinder(float rbase,float rtop,float height)
{
float i;
glPushMatrix();
glTranslatef(0.0,0.0,-rbase/4);
glutSolidCone(rbase,0,32,4);
for(i=0;i<=height;i+=rbase/8)
{
glTranslatef(0.0,0.0,rbase/8);
glutSolidTorus(rbase/4,rbase-((i*(rbase-rtop))/height),16,16);
}
glTranslatef(0.0,0.0,rbase/4);
glutSolidCone(rtop,0,32,4);
glPopMatrix();
}

void bilah (float r_inner,float r_outer,float tebal,int batang)
{
float i;
glPushMatrix();
glTranslatef(0.0,0.0,-tebal/4);
cylinder(r_inner,r_inner,tebal);
glTranslatef(0.0,0.0,tebal/2);
glRotatef(90,0.0,1.0,0.0);
for(i=0;i<batang;i++)
{
glTranslatef(0.0,0.0,r_inner);
glRotatef(315,0.0,0.0,1.0);
blok(0.5,r_inner*4.5,(r_outer-r_inner+(r_inner/4))*2);
glRotatef(45,0.0,0.0,1.0);
glTranslatef(0.0,0.0,-r_inner);
glRotatef(360/batang,1.0,0.0,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 keyboard_s(int key,int x,int y)
{
if (rotation_y_plus !=0)
direction=(rotation_y_plus/abs(rotation_y_plus));
else
direction=-1;
switch(key)
{
case GLUT_KEY_UP:
rotation_y_plus++;
break;
case GLUT_KEY_DOWN:
rotation_y_plus--;
break;
case GLUT_KEY_END:
rotation_y_plus=0;
speed1=false;
pressplus1=0;
speed2=false;
pressplus2=0;
speed3=false;
pressplus3=0;
speed4=false;
pressplus4=0;
pressplus5=180;
Toleh=false;
break;
case GLUT_KEY_F1:
if(speed1 == false)
{
rotation_y_plus=15*direction;
speed1=true;
pressplus1=180;
speed2=false;
pressplus2=0;
speed3=false;
pressplus3=0;
speed4=false;
pressplus4=0;
if(Tolehpress == true)
Toleh=true;
}
else
{
speed1=false;
pressplus1=0;
rotation_y_plus=0;
Toleh=false;
}
break;
case GLUT_KEY_F2:
if(speed2 == false)
{
rotation_y_plus=30*direction;
speed1=false;
pressplus1=0;
speed2=true;
pressplus2=180;
speed3=false;
pressplus3=0;
speed4=false;
pressplus4=0;
if(Tolehpress == true)
Toleh=true;
}
else
{
speed2=false;
pressplus2=0;
rotation_y_plus=0;
Toleh=false;
}
break;
case GLUT_KEY_F3:
if(speed3 == false)
{
rotation_y_plus=45*direction;
speed1=false;
pressplus1=0;
speed2=false;
pressplus2=0;
speed3=true;
pressplus3=180;
speed4=false;
pressplus4=0;
if(Tolehpress == true)
Toleh=true;
}
else
{
speed3=false;
pressplus3=0;
rotation_y_plus=0;
Toleh=false;
}
break;
case GLUT_KEY_F4:
if(speed4 == false)
{
rotation_y_plus=60*direction;
speed1=false;
pressplus1=0;
speed2=false;
pressplus2=0;
speed3=false;
pressplus3=0;
speed4=true;
pressplus4=180;
if(Tolehpress == true)
Toleh=true;
}
else
{
speed4=false;
pressplus4=0;
rotation_y_plus=0;
Toleh=false;
}
break;
case GLUT_KEY_F5:
if(Tolehpress == false)
{
if(speed1==true||speed2==true||speed3==true||speed4==true)
Toleh=true;
Tolehpress=true;
}
else
{
if(speed1==true||speed2==true||speed3==true||speed4==true)
Toleh=false;
Tolehpress=false;
}
break;
case GLUT_KEY_RIGHT:
Rheadplus++;
Turn++;
break;
case GLUT_KEY_LEFT:
Rheadplus--;
Turn--;
break;
case GLUT_KEY_PAGE_UP:
Anggukplus--;
break;
case GLUT_KEY_PAGE_DOWN:
Anggukplus++;
break;
}
}

void Mouse_s(int button, int state, int x, int y)
{
if (state==0 && button==0)
All_plus--;
if (state==0 && button==2)
All_plus++;
}


int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(screen_width,screen_height);
glutInitWindowPosition(0,0);
glutCreateWindow("Tugas2");
glutDisplayFunc(display);
glutIdleFunc(display);
glutReshapeFunc(resize);
glutSpecialFunc(keyboard_s);
glutMouseFunc(Mouse_s);
init();
glutMainLoop();
return(0);
}

Komentar

Postingan populer dari blog ini

Cara Menambahkan Plugin TextFX di notepad++

TextFX adalah plugin pada notepad++ yang digunakan untuk menyortir kata atau kalimat yang sama atau istilah kerenya duplikat data. Berikut saya share cara untuk menambahkan plugin TextFX, perhatikan langkah-langkah berikut! 1. install notepad++ dulu dengan mengunduh filenya disini 2. setelah diunduh kemudian install, setelah di install lalu buka menu Plugins>Plugin Manager>Show Plugin Manager  3. pada Plugin Manager, klik tab Available kemudia geser kebawah dan cari TextFx. klik centang lalu Install. 4. Berhasil, setelah itu restart program notepad++ sekian share dari saya semoga bermanfaat, silahkan bertanya dikolom komentar jika kurang paham. terimakasih

Tenggorokan Kering dan Sakit? Hati-hati! Bisa Jadi Itu Adalah Gejala Kanker Stadium Awal

Kamu harus perhatikan dengan baik! Kanker tenggorokan adalah salah satu kanker yang sering dijumpai pada kebanyakan orang, dan tentu saja hasil pengobatan kanker ini tergantung pada seberapa cepat kita menyadari tingkat keparahan kanker tersebut. Seorang ahli bedah mengatakan bahwa kanker yang didiagnosa pada 5 tahun pertama itu mempunyai tingkat kesembuhan sebesar 90%, tetapi sebaliknya, kanker yang baru diketahui setelah 5 tahun, hanya mempunyai tingkat kesembuhan sekitar 20-30% saja.  Kanker tenggorokan ini tumbuh dari sel Mesothelial yang berkembang pada selaput kerongkongan, dan karena faktor inilah yang akhirnya tumbuh menjadi kanker secara bertahap. Waktu yang diperlukan kanker ini untuk berkembang pada tenggorokan mencapai beberapa tahun lamanya, bahkan dari stadium awal hingga stadium menengah membutuhkan waktu sekitar satu tahun.  Gejala-gejala kanker tenggorokan stadium awal ini adalah sebagai berikut: 1. Merasa kesulitan ketika menelan; biasanya disebabkan oleh ma...

Setting Hamachi

Hamachi adalah zero-configuration virtual private network (VPN) atau jaringan virtual pribadi tanpa konfigurasi. Hamachi merupakan aplikasi opensource yang didistribusikan secara bebas yang mampu membangun hubungan secara langsung antar-komputer yang terkoneksi ke dalam jaringan internet tanpa ada konfigurasi yang rumit, dengan kata lain, membentuk hubungan antar-komputer yang saling berjauhan melalui jaringan internet, seakan-akan komputer tersebut terhubung ke dalam jaringan lokal atau LAN. Pertama-tama  Download softwarenya DISINI  Cara Instal seperti biasa, tinggal next next next :) yang perlu diperhatikan adalah pada saat proses instal beri tanda cek pada Disable vulnerable .... (mungkin windows mendeteksinya sebagai virus)     Setelah proses instalasi berhasil, jalankan program hamachi maka akan tampil seperti berikut :   Klik tombol Power On maka akan berubah menjadi hijau dan tampil ip dari Hamachi 5.X.X.X, selanjutnya secara otomatis saat anda menjala...