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