Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenGL 프로젝트 2001 1351 김병욱 2001 1354 김상진 2001 1358 김성환.

Similar presentations


Presentation on theme: "OpenGL 프로젝트 2001 1351 김병욱 2001 1354 김상진 2001 1358 김성환."— Presentation transcript:

1 OpenGL 프로젝트 김병욱 김상진 김성환

2 개 요 팀 명 : A+불가 팀원 수 : 3명 목적 :수업시간에 배운 내용을 바탕으로 팀 프로젝트를 수행함으로써 OpenGL에 대한 자신감과 성취감을 유발 프로젝트 개발 팀 김상진( ) 김성환( ) 프로젝트 진행 팀장 김병욱( )

3 개발 환경 Windows XP Microsoft Visual C++ OpenGL Photoshop CS

4 프로젝트 목적 그래픽 프로그래밍에 대한 이해 OpenGL에 관한 이해 OpenGL의 사용 범위 확대
Affine Transformations의 이해 유저인터페이스의 구현 3D Object Select 팀 프로젝트에 대한 자신감 고추

5 프로젝트 내용 프로젝트 : 자전거 타는 로보트 로보트가 자전거 타는 모습 3D구현 마우스 이벤트 - 메뉴 선택
- 로봇의 팔(어깨,손목),다리 회전 메뉴구성 - 로봇 어깨 회전 - 로봇 손목 회전 - 로봇 다리 회전 - 로봇 무릎 회전

6 프로젝트 구성 포인터로 몸, 자전거의 각 부분을 지정하고, 전역변수로 다리움직임과 바퀴회전과 자전거 이동을 구현
라이트닝효과를 사용 주변광, 산란광, 반사광의 성분을 결정 좌표축의 position값을  계속해서 0.1씩 감 소 시켜 자전거 이동 구현 glRotatef,glTranslatef 사용 스택을 이용한 glPopMatrix() glPushMatrix() 사용

7 화면구성 로보트가 자전거를 타고 도로를 내려감
메뉴를 선택하고 마우스 오른쪽버튼으로 사람과 자전거의 회전, 팔,다리 회전을 할 수 있음

8 로봇 구현 void torso() //몸통 생성 { glPushMatrix(); //x축 방향으로 -90도 회전
        glRotatef(-90.0, 1.0, 0.0, 0.0);         //실린더로 위쪽이 약간 더 넓은 몸통을 만듧         gluCylinder(t, TORSO_RADIUS, (TORSO_RADIUS+ 0.2), TORSO_HEIGHT, 10, 10);         glPopMatrix(); } void head()   //머리 생성         glTranslatef(0.0, 0.5*HEAD_HEIGHT, 0.0);         glScalef(HEAD_RADIUS, HEAD_HEIGHT, HEAD_RADIUS);         gluSphere(h, 1.0, 10, 10);

9 로봇팔구현 void left_upper_arm() //왼쪽 윗팔 생성 { glPushMatrix();
        glRotatef(20.0, 1.0, 0.0, 0.0);         gluCylinder(lua, UPPER_ARM_RADIUS, UPPER_ARM_RADIUS,                     UPPER_ARM_HEIGHT, 10, 10);         glPopMatrix(); } void left_lower_arm()   //왼쪽 아래팔 생성         gluCylinder(lla, LOWER_ARM_RADIUS, LOWER_ARM_RADIUS,                     LOWER_ARM_HEIGHT, 10, 10); void right_upper_arm()   //오른쪽 윗팔 생성 {         glPushMatrix();         glRotatef(20.0, 1.0, 0.0, 0.0);         gluCylinder(rua, UPPER_ARM_RADIUS, UPPER_ARM_RADIUS,                     UPPER_ARM_HEIGHT, 10, 10);         glPopMatrix();   } void right_lower_arm()   //오른쪽 아래팔 생성         gluCylinder(rla, LOWER_ARM_RADIUS, LOWER_ARM_RADIUS,                     LOWER_ARM_HEIGHT, 10, 10);         glPopMatrix(); 

10 로봇다리구현 void left_upper_leg() //왼쪽 윗다리 생성 { glPushMatrix();
        glRotatef(-90.0, 1.0, 0.0, 0.0);         gluCylinder(lul, UPPER_LEG_RADIUS, UPPER_LEG_RADIUS,                     UPPER_LEG_HEIGHT, 10, 10);         glPopMatrix(); } void left_lower_leg()   //왼쪽 아래다리 생성         glRotatef(-60.0, 1.0, 0.0, 0.0);         gluCylinder(lll, LOWER_LEG_RADIUS, LOWER_LEG_RADIUS,                     LOWER_LEG_HEIGHT, 10, 10); void right_upper_leg()   //오른쪽 윗다리 생성 {         glPushMatrix();         glRotatef(-90.0, 1.0, 0.0, 0.0);         gluCylinder(rul, UPPER_LEG_RADIUS, UPPER_LEG_RADIUS,                     UPPER_LEG_HEIGHT, 10, 10);         glPopMatrix(); } void right_lower_leg()   //오른쪽 아래다리 생성         glRotatef(-60.0, 1.0, 0.0, 0.0);         gluCylinder(rll ,LOWER_LEG_RADIUS, LOWER_LEG_RADIUS,                     LOWER_LEG_HEIGHT, 10, 10);

11 자전거 구현 void bicycle_upper() //자전거 윗쪽 차체 생성 { glPushMatrix();
       glRotatef(0.0, 0.0, 0.0, 0.0);         gluCylinder(bu, BICYCLE_RADIUS, BICYCLE_RADIUS,                     BICYCLE_UPPER_HEIGHT, 10, 10);         glPopMatrix(); } void bicycle_front()   //자전거 앞쪽 차체 생성         //핸들과 앞바퀴를 연결해 주는 차체를 x축 방향으로 65도 기울여서 생성         glRotatef(65.0, 1.0, 0.0, 0.0);         gluCylinder(bf, BICYCLE_RADIUS, BICYCLE_RADIUS,                     BICYCLE_FRONT_HEIGHT, 10, 10); void bicycle_handle()   //자전거 핸들 생성 {         glPushMatrix();         glRotatef(90.0, 0.0, 1.0, 0.0);         gluCylinder(bf, BICYCLE_RADIUS, BICYCLE_RADIUS,                      BICYCLE_HANDLE_HEIGHT,10, 10);         glPopMatrix(); } void bicycle_lower1()   //자전거 아래쪽 앞부분 차체 생성         glRotatef(-30.0, 1.0, 0.0, 0.0);         gluCylinder(bl1, BICYCLE_RADIUS, BICYCLE_RADIUS,                     BICYCLE_UPPER_HEIGHT, 10, 10);

12 자전거 구현 void bicycle_lower2() //자전거 아래쪽 뒷부분 차체 생성 { glPushMatrix();
        glRotatef(0.0, 0.0, 0.0, 0.0);        gluCylinder(bl2, BICYCLE_RADIUS, BICYCLE_RADIUS,                     BICYCLE_UPPER_HEIGHT, 10, 10);         glPopMatrix(); } void bicycle_back()   //자전거 뒷쪽 차체 생성         glRotatef(-30.0, 1.0, 0.0, 0.0);         gluCylinder(bb, BICYCLE_RADIUS, BICYCLE_RADIUS, void bicycle_seat()   //자전거 안장 생성 {         glPushMatrix();         glRotatef(-90.0, 1.0, 0.0, 0.0);         gluCylinder(bs, BICYCLE_SEAT_RADIUS, BICYCLE_SEAT_RADIUS,                     BICYCLE_SEAT_HEIGHT, 10, 10);         glPopMatrix(); } void right_pedal_bar()   //자전거 오른쪽 페달 기둥 생성         glRotatef(-75.0, 1.0, 0.0, 0.0);         gluCylinder(rpb,PEDAL_BAR_RADIUS, PEDAL_BAR_RADIUS,                     PEDAL_BAR_HEIGHT, 10, 10);

13 자전거 구현 void right_pedal() //자전거 오른쪽 페달 생성 { glPushMatrix();
        glRotatef(90.0, 0.0, 1.0, 0.0);         gluCylinder(rp, PEDAL_RADIUS, PEDAL_RADIUS, PEDAL_HEIGHT, 10, 10);         glPopMatrix(); } void left_pedal_bar()   //자전거 왼쪽 페달 기둥 생성         glRotatef(-75.0, 1.0, 0.0, 0.0);         gluCylinder(lpb, PEDAL_BAR_RADIUS, PEDAL_BAR_RADIUS,                     PEDAL_BAR_HEIGHT, 10, 10); void left_pedal()   //자전거 왼쪽 페달 생성         gluCylinder(lp, PEDAL_RADIUS, PEDAL_RADIUS, PEDAL_HEIGHT, 10, 10);

14 소스구현 void mouse(int btn, int state, int x, int y) {
if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) theta[angle] += 5.0; if( theta[angle] > ) theta[angle] -= 360.0; } if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) theta[angle] -= 5.0; if( theta[angle] < ) theta[angle] += 360.0; display(); void myReshape(int w, int h) { glViewport(0, 0, w, h); //시역 조절 //절단 상자 조절 glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho(-10.0, 10.0, * (GLfloat) h / (GLfloat) w, 10.0 * (GLfloat) h / (GLfloat) w, -10.0, 10.0); else glOrtho(-10.0 * (GLfloat) w / (GLfloat) h, 10.0 * (GLfloat) w / (GLfloat) h, 0.0, 10.0, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); }

15 소스구현 void main(int argc, char **argv) { glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(600, 600); //600by600 크기의 윈도우 생성 glutCreateWindow("bicycles-robot"); //윈도우 상단에 bicycle-robot이란 이름의 title생성 myinit(); glutReshapeFunc(myReshape); glutIdleFunc(idle); glutDisplayFunc(display); glutMouseFunc(mouse); } //메뉴 생성 glutCreateMenu(menu); glutAddMenuEntry("torso", 0); glutAddMenuEntry(“head1", 1); glutAddMenuEntry(“head2", 2); glutAddMenuEntry("right_upper_arm", 3); glutAddMenuEntry("right_lower_arm", 4); glutAddMenuEntry("left_upper_arm", 5); glutAddMenuEntry("left_lower_arm", 6); glutAddMenuEntry("right_upper_leg", 7); glutAddMenuEntry("right_lower_leg", 8); glutAddMenuEntry("left_upper_leg", 9); glutAddMenuEntry("left_lower_leg", 10); glutAddMenuEntry("quit", 11); glutAttachMenu(GLUT_LEFT_BUTTON); glutMainLoop(); }

16 소스구현 void idle() { if(direction==1) else //direction2=0 {
theta[7] -= 1; //오른쪽 다리의 theta값을 1씩 줄여줌으로써 다리를 움직여줌 theta[9] += 1; //왼쪽 다리의 theta값을 1씩 늘여줌으로써 다리를 움직여줌 theta[11] += 1; //자전거 바퀴의 초기theta값이 0.0으로 설정되어 있으므로 1씩 연속적으로 증가 시켜줌으로써 회전시켜줌 } else theta[7] += 1; theta[9] -= 1; theta[11] += 1; //자전거가 앞쪽으로 이동하기 때문에 바퀴는 한 방향으로만 구른다. 따라서 theta값을 줄여줄 필요없이 계속 증가시켜줌 if(theta[7] == 220.0) direction=1; if(theta[7] == 140.0) direction=0; if(direction2==1) //초기 direction2는 0으로 설정되어 있음 theta[12] += 1; //theta[12] 값을 계속해서 1씩 증가, 초기 theta[12]값은 1200으로 설정되어 있음 position -= 0.02; //position값을 0.씩 감소 position -= 0.02; //position값을 0.씩 감소 } else //direction2=0 { theta[12] -= 1; position -= 0.02; //자전거의 이동은 한 방향이므로 좌표축의 position값을 계속해서 0.1씩 감소 if(theta[12] == 0.0) //theta[12]의 값이 0이 되었을 경우엔 자전거의 이동이 끝나고 이미 화면상에서 사라졌을 때이므로 position값을 12로 바꿔 주어서 자전거를 다시 화면 우상단에 위치시켜줌 position = 12.0; direction2 = 1; if(theta[12] == ) //theta[12]의 값이 1200이 되었을 경우는 자전거를 다시 우상단에 위치시켜 direction2=0인 경우로 보내 position값과 theta값을 다시 감소시켜 준다 direction2 = 0; display();

17 프로젝트 결과물 첨부파일 실행파일


Download ppt "OpenGL 프로젝트 2001 1351 김병욱 2001 1354 김상진 2001 1358 김성환."

Similar presentations


Ads by Google