Undergoing

OpenGL로 시계 그리기 본문

~2012.05.01 Legacy

OpenGL로 시계 그리기

Halkrine 2010. 4. 6. 21:34


일단 구현하라는 내용만
-----------------------------------------------------------------
문제
1) 시계 바탕 그리기
1.1 삼각형 그리기
관측공간을 (-2.0, -2.0) 과 (2.0, 2.0)을 모서리로 하는 사각형으로 설정
삼각형을 그리는 프로그램 작성[ void tick_mark(void) ]
1.2 삼각형을 회전해서 바탕 그리기
함수 [void draw_plate(void)]를 작성하고 display에서 호출한다.
-----------------------------------------------------------------



#include<GL/glut.h>
#include<stdio.h>

void myinit(void)
{
 glClearColor(0.0, 0.3, 0.5, 1.0);
 glColor3ub(157, 209, 255);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 gluOrtho2D(-2.0,-2.0,2.0,2.0);
glScalef(0.5f, 0.5f, 1);
glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
}

void tick_mark(void)
{    
 glBegin(GL_TRIANGLES);
  glVertex2f(-0.1,0.0);
  glVertex2f(0.0,0.02);
  glVertex2f(0.0,-0.02);
 glEnd();
}

void draw_plate()
{
 for(int i=0;i<60;i++)
 {
  glPushMatrix();
   glRotatef(i*6,0,0,1);
   glTranslatef(1.55,0,0);
  if(i%5 == 0) glScalef(2.0f, 1.0f, 1.0f);
   tick_mark();
   
  glPopMatrix();
 }
}

void display()

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     
 draw_plate();
 glFlush();
}

void main(int argc, char **argv)
{
 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
 glutInitWindowSize(500, 500);
 glutInitWindowPosition(0, 0);
 glutCreateWindow("base");
 glutDisplayFunc(display);
 myinit(); glutMainLoop();
}

1.1은 만드는 거 일도 아니고(단지 좀 짱났던 건 PPT에 제시된 색상 찾느라 포토샵 스포이드로 배경색과 화살표색을 찾아 돌아다닌 정도), 1.2는 myinit이랑 본함수에서 꽤나 오랜 시간 헤맸다.

이중훼이크 즐염.