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

Download APK Pokemon GO

Download APK Pokemon GO - game pokemon Go merupakan game yang viral baru-baru ini. game yang sebenarnya diangkat dari film kartun pokemon kini dikembangkan dalam bentuk yang lebih realistis, dimana penggunanya bisa merasakan sensasi permainan yang begitu nyata. Download APK Pokemon GO adalah game yang paling ditunggu-tunggu oleh penggemarnya yang sekarang sudah rilis! Namun belum bisa di dapatkan di App Store dan Play Store Indonesia soalnya baru dibuka dalam wilayah negara Amerika dan Australia saja. tetapi tidak usah kawatir, kami akan membuatkan tutorial cara Download Pokemon Go dimana kalian bisa menggunakan smartphone IOS maupun Android sehingga kalian dapat memainkan game ini sekarang.   berikut adalah Cara Download APK Pokemon GO dan cara menginstall Pokemon Go : smartphone Android: Download dulu aplikasinya(.apk) nya disini Install Pokemon Go sesuai dengan petunjuk installasi di smartphone kalian. selesai. smartphone apple(IOS): Untuk smartp...

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

Free Game Downloads Angry Birds Go! 1.6.1 APK Terbaru 2015 for Android

Free Game Downloads Angry Birds Go! 1.6.1 APK Terbaru 2015 - Angry Birds telah merilis versi terbarunya untuk para penggemar games seru ini, game yang sangat populer ini merupakan game terbaik saat ini, selain seru permainannya game ini juga menantang karena setiap versi memiliki misi tantangan yang berbeda. Game Angry Birds GO! ini merupakan keluaran update terbaru yang dirilis tahun 2015 ini oleh Rovio sang pencipta game burung dan babi yang bikin gemes ini. Yang mana pada game ini kaliah harus menuntaskan semua misi jika ingin membuka tantangan tingkat level yang tinggi, nah maka dengan itu sobat harus menjajal untuk menginstall pada smartphone androidnya untuk bisa tau betapa seru dan asiknya bermain game ini. Angry Birds GO! ini memliki beberapa fitur-fitur terbarunya, dengan suasana lokasi permainan yang lebih bagus, burung yang lebih baik ketimbang versi sebelumnya, anda juga bisa memainkan game angry birds ini secara multiplayers, karakter yang bagus dan terbaru, sp...