Rabu, 01 Mei 2013

Widgets

Menggambar Stopwatch Analog pada GLUT



Berikut adalah program Stopwatch Analog menggunakan Open GL

Sourcecode : 
 
#include <stdlib.h>
#include <glut.h>
#include <math.h>

#define PI 3.14
float sudut = 0;
int n;


void kotak(int x, int y){
       glBegin (GL_QUADS );
              glVertex2d (x,y);
              glVertex2d (x,-y);
              glVertex2d (-x,-y);
              glVertex2d (-x,y);
       glEnd() ;
}
void titikangka(float jarak, float x, float y) {
 glPointSize(10);
 glBegin(GL_POINTS);
  glColor3f(0,0,0);
  for(n=0;n<360;n+=30)
   glVertex2f(jarak*(float)sin(n*PI/180)+x,jarak*(float)cos(n*PI/180)+y);
 glEnd();
}

void titikmenit(float jarak, float x, float y) {
 glPointSize(2);

 glBegin(GL_POINTS);
  glColor3f(0,0,0);
  for(n=0;n<360;n+=6)
   glVertex2f(jarak*(float)sin(n*PI/180)+x,jarak*(float)cos(n*PI/180)+y);
 glEnd();
}

void Jam(){
        glBegin(GL_POLYGON);
               glColor3f(0,0,0);
               glVertex2i(0,170);
               glVertex2i(15,150);
               glVertex2i(7,150);
               glVertex2i(7,0);
               glVertex2i(-7,0);
               glVertex2i(-7,150);
               glVertex2i(-15,150);
        glEnd();
}

void Menit(){
        glBegin(GL_POLYGON);
        glColor3f(0,0,0);
               glVertex2i(0,220);
               glVertex2i(10,200);
               glVertex2i(5,200);
               glVertex2i(5,0);
               glVertex2i(-5,0);
               glVertex2i(-5,200);
               glVertex2i(-10,200);
        
        glEnd();
}
void Detik(){
        glBegin(GL_TRIANGLES);
        glColor3f(1,0,0);
        glVertex2i(0,240);
        glVertex2i(5,-60);
        glVertex2i(-5,-60);
        glEnd();
}

void tampil(void){
        glClear(GL_COLOR_BUFFER_BIT);
               glColor3f(0,1,0);
               kotak(280,280);
               glColor3f(1,1,0);
               kotak(260,260);
               titikangka(240.,0.,0.);
               titikmenit(240.,0.,0.);
        
               glPushMatrix();
               glRotatef(sudut,0,0,1);
               Detik();
               glPopMatrix();

               glPushMatrix();
               glRotatef(sudut/60,0,0,1);
               Menit();
               glPopMatrix();

               glPushMatrix();
               glRotatef(sudut/720,0,0,1);
               Jam();
               glPopMatrix();
        glFlush();
}

void timer(int value){
        sudut-=6;
        glutPostRedisplay();
        glutTimerFunc(1000/12,timer,0);
}

void main (int argc, char **argv){
        glutInit(&argc, argv);
        glutInitWindowPosition(100,100);
        glutInitWindowSize(400,400);
        glutCreateWindow("StopWatch");
              gluOrtho2D(-320.,320.,-320.,320.);
        glutDisplayFunc(tampil );
        glutTimerFunc(1,timer,0);
        glutMainLoop();
}

Tampilan printscreen :
 

0 komentar:

Posting Komentar