OpenGL
OpenGL 프로젝 프로젝 트 트
2001 1351
2001 1351 김병욱 김병욱 2001 1354
2001 1354 김상진 김상진 2001 1358
2001 1358 김성환 김성환
개 요 개 요
팀 명 팀 명 : A+ : A+ 불가 불가
팀원 수 팀원 수 : 3 : 3 명 명
목적 목적 : : 수업시간에 배운 내용을 바탕으로 수업시간에 배운 내용을 바탕으로 팀 프로젝트를 수행함으로써
팀 프로젝트를 수행함으로써 OpenGL OpenGL 에 에 대한 자신감과 성취감을 유발
대한 자신감과 성취감을 유발
프로젝트 진행 팀장 프로젝트 개발 팀
김상진 (20001121)
개발 환경 개발 환경
Windows XP Windows XP
Microsoft Visual C++ Microsoft Visual C++
OpenGL OpenGL
Photoshop CS Photoshop CS
프로젝트 목적 프로젝트 목적
그래픽 프로그래밍에 대한 이해그래픽 프로그래밍에 대한 이해
OpenGLOpenGL 에 관한 이해에 관한 이해
OpenGLOpenGL 의 사용 범위 확대의 사용 범위 확대
Affine TransformationsAffine Transformations 의 이해의 이해
유저인터페이스의 구현유저인터페이스의 구현
3D Object Select3D Object Select
팀 프로젝트에 대한 자신감 고추팀 프로젝트에 대한 자신감 고추프로젝트 내용 프로젝트 내용
프로젝트 프로젝트 : : 자전거 타는 로보트자전거 타는 로보트
로보트가 자전거 타는 모습 로보트가 자전거 타는 모습 3D3D 구현구현
마우스 이벤트마우스 이벤트 - - 메뉴 선택메뉴 선택- - 로봇의 팔로봇의 팔 (( 어깨어깨 ,, 손목손목 ),), 다리 회전다리 회전
메뉴구성메뉴구성- - 로봇 어깨 회전 로봇 어깨 회전 - - 로봇 손목 회전로봇 손목 회전 - - 로봇 다리 회전 로봇 다리 회전 - - 로봇 무릎 회전 로봇 무릎 회전
프로젝트 구성 프로젝트 구성
포인터로 몸포인터로 몸 , , 자전거의 각 부분을 지정하고자전거의 각 부분을 지정하고 , , 전역전역 변수로 다리움직임과 바퀴회전과 자전거 이동을 구 변수로 다리움직임과 바퀴회전과 자전거 이동을 구 현현
라이트닝효과를 사용 주변광라이트닝효과를 사용 주변광 , , 산란광산란광 , , 반사광의 반사광의 성분을 결정성분을 결정
좌표축의 좌표축의 positionposition 값을 계속해서 값을 계속해서 0.10.1 씩 감씩 감 소 시켜 자전거 이동 구현소 시켜 자전거 이동 구현
glRotatef,glTranslatef glRotatef,glTranslatef 사용사용
스택을 이용한 스택을 이용한 glPopMatrix() glPushMatrix() glPopMatrix() glPushMatrix() 사사 용용화면구성 화면구성
로보트가 자전거를 로보트가 자전거를 타고 도로를 내려 타고 도로를 내려 감 감
메뉴를 선택하고 메뉴를 선택하고 마우스 오른쪽버튼 마우스 오른쪽버튼
으로 사람과 자전 으로 사람과 자전
거의 회전
거의 회전 , , 팔 팔 , , 다 다
리 회전을 할 수 있
리 회전을 할 수 있
음 음
로봇 구현 로봇 구현
void torso() //
void torso() // 몸통 생성 몸통 생성 { {
glPushMatrix(); glPushMatrix();
//x //x 축 방향으로 축 방향으로 -90 -90 도 회전 도 회전
glRotatef(-90.0, 1.0, 0.0, 0.0); glRotatef(-90.0, 1.0, 0.0, 0.0);
// // 실린더로 위쪽이 약간 더 넓은 몸통을 만듧 실린더로 위쪽이 약간 더 넓은 몸통을 만듧
gluCylinder(t, TORSO_RADIUS, (TORSO_RADIUS+ 0.2), TORSO_HEIGHT, 10, 10); gluCylinder(t, TORSO_RADIUS, (TORSO_RADIUS+ 0.2), TORSO_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void head() //
void head() // 머리 생성 머리 생성 { {
glPushMatrix(); glPushMatrix();
glTranslatef(0.0, 0.5*HEAD_HEIGHT, 0.0); glTranslatef(0.0, 0.5*HEAD_HEIGHT, 0.0);
glScalef(HEAD_RADIUS, HEAD_HEIGHT, HEAD_RADIUS); glScalef(HEAD_RADIUS, HEAD_HEIGHT, HEAD_RADIUS);
gluSphere(h, 1.0, 10, 10); gluSphere(h, 1.0, 10, 10);
glPopMatrix(); glPopMatrix();
} }
로봇팔구현 로봇팔구현
void left_upper_arm() //
void left_upper_arm() // 왼쪽 윗팔 생성 왼쪽 윗팔 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(20.0, 1.0, 0.0, 0.0); glRotatef(20.0, 1.0, 0.0, 0.0);
gluCylinder(lua, UPPER_ARM_RADIUS, UgluCylinder(lua, UPPER_ARM_RADIUS, U PPER_ARM_RADIUS,
PPER_ARM_RADIUS,
UPPER_ARM_HEIGHT, 10, 10); UPPER_ARM_HEIGHT, 10, 10);
glPopMatrix();glPopMatrix();
} }
void left_lower_arm() //
void left_lower_arm() //왼쪽 아래팔 생성 왼쪽 아래팔 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(20.0, 1.0, 0.0, 0.0); glRotatef(20.0, 1.0, 0.0, 0.0);
gluCylinder(lla, LOWER_ARM_RADIUS, LgluCylinder(lla, LOWER_ARM_RADIUS, L OWER_ARM_RADIUS,
OWER_ARM_RADIUS,
LOWER_ARM_HEIGHT, 10, 10); LOWER_ARM_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void right_upper_arm() //
void right_upper_arm() // 오른쪽 윗팔 생성 오른쪽 윗팔 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(20.0, 1.0, 0.0, 0.0); glRotatef(20.0, 1.0, 0.0, 0.0);
gluCylinder(rua, UPPER_ARM_RADIUS, UgluCylinder(rua, UPPER_ARM_RADIUS, U PPER_ARM_RADIUS,
PPER_ARM_RADIUS,
UPPER_ARM_HEIGHT, 10, 10); UPPER_ARM_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void right_lower_arm() //
void right_lower_arm() //오른쪽 아래팔 생성 오른쪽 아래팔 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(20.0, 1.0, 0.0, 0.0); glRotatef(20.0, 1.0, 0.0, 0.0);
gluCylinder(rla, LOWER_ARM_RADIUS, LgluCylinder(rla, LOWER_ARM_RADIUS, L OWER_ARM_RADIUS,
OWER_ARM_RADIUS,
LOWER_ARM_HEIGHT, 10, 10); LOWER_ARM_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
로봇다리구현 로봇다리구현
void left_upper_leg() //
void left_upper_leg() //왼쪽 윗다리 생성 왼쪽 윗다리 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(-90.0, 1.0, 0.0, 0.0); glRotatef(-90.0, 1.0, 0.0, 0.0);
gluCylinder(lul, UPPER_LEG_RADIUS, UPPgluCylinder(lul, UPPER_LEG_RADIUS, UPP ER_LEG_RADIUS,
ER_LEG_RADIUS,
UPPER_LEG_HEIGHT, 10, 10); UPPER_LEG_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void left_lower_leg() //
void left_lower_leg() //왼쪽 아래다리 생성 왼쪽 아래다리 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(-60.0, 1.0, 0.0, 0.0); glRotatef(-60.0, 1.0, 0.0, 0.0);
gluCylinder(lll, LOWER_LEG_RADIUS, LOgluCylinder(lll, LOWER_LEG_RADIUS, LO WER_LEG_RADIUS,
WER_LEG_RADIUS,
LOWER_LEG_HEIGHT, 10, 10); LOWER_LEG_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void right_upper_leg() //
void right_upper_leg() //오른쪽 윗다리 생성 오른쪽 윗다리 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(-90.0, 1.0, 0.0, 0.0); glRotatef(-90.0, 1.0, 0.0, 0.0);
gluCylinder(rul, UPPER_LEG_RADIUS, UPgluCylinder(rul, UPPER_LEG_RADIUS, UP PER_LEG_RADIUS,
PER_LEG_RADIUS,
UPPER_LEG_HEIGHT, 10, 10); UPPER_LEG_HEIGHT, 10, 10);
glPopMatrix();glPopMatrix();
} }
void right_lower_leg() //
void right_lower_leg() //오른쪽 아래다리 생성 오른쪽 아래다리 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(-60.0, 1.0, 0.0, 0.0); glRotatef(-60.0, 1.0, 0.0, 0.0);
gluCylinder(rll ,LOWER_LEG_RADIUS, LOgluCylinder(rll ,LOWER_LEG_RADIUS, LO WER_LEG_RADIUS,
WER_LEG_RADIUS,
LOWER_LEG_HEIGHT, 10, 10); LOWER_LEG_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
자전거 구현 자전거 구현
void bicycle_upper() //
void bicycle_upper() //자전거 윗쪽 차체 생성 자전거 윗쪽 차체 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(0.0, 0.0, 0.0, 0.0); glRotatef(0.0, 0.0, 0.0, 0.0);
gluCylinder(bu, BICYCLE_RADIUS, BICYCLgluCylinder(bu, BICYCLE_RADIUS, BICYCL E_RADIUS,
E_RADIUS,
BICYCLE_UPPER_HEIGHT, 10, 10); BICYCLE_UPPER_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void bicycle_front() //
void bicycle_front() //자전거 앞쪽 차체 생성 자전거 앞쪽 차체 생성 { {
glPushMatrix(); glPushMatrix();
////핸들과 앞바퀴를 연결해 주는 차체를 핸들과 앞바퀴를 연결해 주는 차체를 xx축 축 방향으로
방향으로 6565도 기울여서 생성 도 기울여서 생성
glRotatef(65.0, 1.0, 0.0, 0.0); glRotatef(65.0, 1.0, 0.0, 0.0);
gluCylinder(bf, BICYCLE_RADIUS, BICYCLgluCylinder(bf, BICYCLE_RADIUS, BICYCL E_RADIUS,
E_RADIUS,
BICYCLE_FRONT_HEIGHT, 10, 10); BICYCLE_FRONT_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
void bicycle_handle() //
void bicycle_handle() //자전거 핸들 생성 자전거 핸들 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 1.0, 0.0);
gluCylinder(bf, BICYCLE_RADIUS, BICYCLgluCylinder(bf, BICYCLE_RADIUS, BICYCL E_RADIUS,
E_RADIUS,
BICYCLE_HANDLE_HEIGHT,10, 1BICYCLE_HANDLE_HEIGHT,10, 1 0); 0);
glPopMatrix(); glPopMatrix();
} }
void bicycle_lower1() //
void bicycle_lower1() //자전거 아래쪽 앞부분 자전거 아래쪽 앞부분 차체 생성
차체 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(-30.0, 1.0, 0.0, 0.0); glRotatef(-30.0, 1.0, 0.0, 0.0);
gluCylinder(bl1, BICYCLE_RADIUS, BICYCgluCylinder(bl1, BICYCLE_RADIUS, BICYC LE_RADIUS,
LE_RADIUS,
BICYCLE_UPPER_HEIGHT, 10, 10); BICYCLE_UPPER_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
자전거 구현 자전거 구현
void bicycle_lower2() //
void bicycle_lower2() //자전거 아래쪽 뒷부분 자전거 아래쪽 뒷부분 차체 생성
차체 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(0.0, 0.0, 0.0, 0.0); glRotatef(0.0, 0.0, 0.0, 0.0);
gluCylinder(bl2, BICYCLE_RADIUS, BICYCLgluCylinder(bl2, BICYCLE_RADIUS, BICYCL E_RADIUS,
E_RADIUS,
BICYCLE_UPPER_HEIGHT, 10, 10); BICYCLE_UPPER_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void bicycle_back() //
void bicycle_back() //자전거 뒷쪽 차체 생성 자전거 뒷쪽 차체 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(-30.0, 1.0, 0.0, 0.0); glRotatef(-30.0, 1.0, 0.0, 0.0);
gluCylinder(bb, BICYCLE_RADIUS, BICYCLgluCylinder(bb, BICYCLE_RADIUS, BICYCL E_RADIUS,
E_RADIUS,
BICYCLE_UPPER_HEIGHT, 10, 10); BICYCLE_UPPER_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
}}
void bicycle_seat() //
void bicycle_seat() //자전거 안장 생성 자전거 안장 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(-90.0, 1.0, 0.0, 0.0); glRotatef(-90.0, 1.0, 0.0, 0.0);
gluCylinder(bs, BICYCLE_SEAT_RADIUS, BgluCylinder(bs, BICYCLE_SEAT_RADIUS, B ICYCLE_SEAT_RADIUS,
ICYCLE_SEAT_RADIUS,
BICYCLE_SEAT_HEIGHT, 10, 10); BICYCLE_SEAT_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void right_pedal_bar() //
void right_pedal_bar() // 자전거 오른쪽 페달 기자전거 오른쪽 페달 기 둥 생성
둥 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(-75.0, 1.0, 0.0, 0.0); glRotatef(-75.0, 1.0, 0.0, 0.0);
gluCylinder(rpb,PEDAL_BAR_RADIUS, PEgluCylinder(rpb,PEDAL_BAR_RADIUS, PE DAL_BAR_RADIUS,
DAL_BAR_RADIUS,
PEDAL_BAR_HEIGHT, 10, 10); PEDAL_BAR_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
자전거 구현 자전거 구현
void right_pedal() //
void right_pedal() //자전거 오른쪽 페달 생성 자전거 오른쪽 페달 생성 {
{
glPushMatrix(); glPushMatrix();
glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 1.0, 0.0);
gluCylinder(rp, PEDAL_RADIUS, PEDAL_RADIUS, PEDAL_HEIGHT, 10, 10); gluCylinder(rp, PEDAL_RADIUS, PEDAL_RADIUS, PEDAL_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void left_pedal_bar() //
void left_pedal_bar() //자전거 왼쪽 페달 기둥 생성 자전거 왼쪽 페달 기둥 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(-75.0, 1.0, 0.0, 0.0); glRotatef(-75.0, 1.0, 0.0, 0.0);
gluCylinder(lpb, PEDAL_BAR_RADIUS, PEDAL_BAR_RADIUS, gluCylinder(lpb, PEDAL_BAR_RADIUS, PEDAL_BAR_RADIUS,
PEDAL_BAR_HEIGHT, 10, 10); PEDAL_BAR_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
void left_pedal() //
void left_pedal() //자전거 왼쪽 페달 생성 자전거 왼쪽 페달 생성 { {
glPushMatrix(); glPushMatrix();
glRotatef(90.0, 0.0, 1.0, 0.0); glRotatef(90.0, 0.0, 1.0, 0.0);
gluCylinder(lp, PEDAL_RADIUS, PEDAL_RADIUS, PEDAL_HEIGHT, 10, 10); gluCylinder(lp, PEDAL_RADIUS, PEDAL_RADIUS, PEDAL_HEIGHT, 10, 10);
glPopMatrix(); glPopMatrix();
} }
소스구현 소스구현
void mouse(int btn, int state, int x, int y) void mouse(int btn, int state, int x, int y) { {
if(btn==GLUT_LEFT_BUTTON && stat if(btn==GLUT_LEFT_BUTTON && stat e == GLUT_DOWN)
e == GLUT_DOWN) { {
theta[angle] += 5.0;
theta[angle] += 5.0;
if( theta[angle] > 360.0 ) if( theta[angle] > 360.0 ) theta[angle] -= 360.0;
theta[angle] -= 360.0;
} }
if(btn==GLUT_RIGHT_BUTTON && st if(btn==GLUT_RIGHT_BUTTON && st ate == GLUT_DOWN)
ate == GLUT_DOWN) { {
theta[angle] -= 5.0; theta[angle] -= 5.0;
if( theta[angle] < 360.0 ) if( theta[angle] < 360.0 ) theta[angle] += 360.0;
theta[angle] += 360.0;
} }
display(); display();
} }
void myReshape(int w, int h) void myReshape(int w, int h) { {
glViewport(0, 0, w, h); //
glViewport(0, 0, w, h); // 시역 조절 시역 조절 // // 절단 상자 조절 절단 상자 조절
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glLoadIdentity();
if (w <= h) if (w <= h)
glOrtho(-10.0, 10.0, -10.0 * (GL glOrtho(-10.0, 10.0, -10.0 * (GL float) h / (GLfloat) w, 10.0 * (GLfloat) float) h / (GLfloat) w, 10.0 * (GLfloat) h / h /
(GLfloat) w, -10.0, 10.0); (GLfloat) w, -10.0, 10.0);
else else
glOrtho(-10.0 * (GLfloat) w / (G glOrtho(-10.0 * (GLfloat) w / (G Lfloat) h, 10.0 * (GLfloat) w /
Lfloat) h, 10.0 * (GLfloat) w /
(GLfloat) h, 0.0, 10.0, -10.0, 10.0);
(GLfloat) h, 0.0, 10.0, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); glLoadIdentity();
} }
소스구현 소스구현
void main(int argc, char **argv) void main(int argc, char **argv) { {
glutInit(&argc, argv);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600, 600); //60 glutInitWindowSize(600, 600); //60 0by600
0by600 크기의 윈도우 생성 크기의 윈도우 생성
glutCreateWindow("bicycles-robot"); glutCreateWindow("bicycles-robot");
// // 윈도우 상단에 윈도우 상단에 bicycle-robot bicycle-robot 이란 이 이란 이 름의 름의 title title 생성 생성
myinit();
myinit();
glutReshapeFunc(myReshape); glutReshapeFunc(myReshape);
glutIdleFunc(idle); glutIdleFunc(idle);
glutDisplayFunc(display);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMouseFunc(mouse);
} }
////메뉴 생성메뉴 생성
glutCreateMenu(menu);
glutCreateMenu(menu);
glutAddMenuEntry("torso", 0);glutAddMenuEntry("torso", 0);
glutAddMenuEntry(“head1", 1);glutAddMenuEntry(“head1", 1);
glutAddMenuEntry(“head2", 2);glutAddMenuEntry(“head2", 2);
glutAddMenuEntry("right_upper_arm", 3);
glutAddMenuEntry("right_upper_arm", 3);
glutAddMenuEntry("right_lower_arm", 4);glutAddMenuEntry("right_lower_arm", 4);
glutAddMenuEntry("left_upper_arm", 5);glutAddMenuEntry("left_upper_arm", 5);
glutAddMenuEntry("left_lower_arm", 6);glutAddMenuEntry("left_lower_arm", 6);
glutAddMenuEntry("right_upper_leg", 7);glutAddMenuEntry("right_upper_leg", 7);
glutAddMenuEntry("right_lower_leg", 8);glutAddMenuEntry("right_lower_leg", 8);
glutAddMenuEntry("left_upper_leg", 9);glutAddMenuEntry("left_upper_leg", 9);
glutAddMenuEntry("left_lower_leg", 10);glutAddMenuEntry("left_lower_leg", 10);
glutAddMenuEntry("quit", 11);
glutAddMenuEntry("quit", 11);
glutAttachMenu(GLUT_LEFT_BUTTON);glutAttachMenu(GLUT_LEFT_BUTTON);
glutMainLoop();glutMainLoop();
} }
소스구현 소스구현
void idle() void idle() {{
if(direction==1) if(direction==1) {{
theta[7] -= 1; //
theta[7] -= 1; //오른쪽 다리의 오른쪽 다리의 thetatheta값을 값을 11씩 줄여씩 줄여 줌으로써 다리를 움직여줌
줌으로써 다리를 움직여줌 theta[9] += 1; //
theta[9] += 1; //왼쪽 다리의 왼쪽 다리의 thetatheta값을 값을 11씩 늘여줌씩 늘여줌 으로써 다리를 움직여줌
으로써 다리를 움직여줌 theta[11] += 1; //
theta[11] += 1; //자전거 바퀴의 초기자전거 바퀴의 초기thetatheta값이 값이 0.00.0 으로 설정되어 있으므로
으로 설정되어 있으므로 11씩 연속적으로 증가 시켜줌으씩 연속적으로 증가 시켜줌으 로써 회전시켜줌
로써 회전시켜줌 }}
elseelse {{
theta[7] += 1;
theta[7] += 1;
theta[9] -= 1;
theta[9] -= 1;
theta[11] += 1; //
theta[11] += 1; //자전거가 앞쪽으로 이동하기 때문에 자전거가 앞쪽으로 이동하기 때문에 바퀴는 한 방향으로만 구른다
바퀴는 한 방향으로만 구른다. . 따라서 따라서 thetatheta값을 줄여값을 줄여 줄 필요없이 계속 증가시켜줌
줄 필요없이 계속 증가시켜줌 }
}
if(theta[7] == 220.0) direction=1;
if(theta[7] == 220.0) direction=1;
if(theta[7] == 140.0) direction=0;
if(theta[7] == 140.0) direction=0;
if(direction2==1) //
if(direction2==1) //초기 초기 direction2direction2는 는 00으로 설정으로 설정 되어 있음
되어 있음 {{
theta[12] += 1; //theta[12]
theta[12] += 1; //theta[12] 값을 계속해서 값을 계속해서 11씩 증씩 증 가, 초기 theta[12]값은 1200으로 설정되어 있음
position -= 0.02; //position
position -= 0.02; //position값을 값을 0.0.씩 감소씩 감소 }}
else //direction2=0 else //direction2=0 {{
theta[12] -= 1;
theta[12] -= 1;
position -= 0.02; //
position -= 0.02; //자전거의 이동은 한 방자전거의 이동은 한 방 향이므로 좌표축의
향이므로 좌표축의 positionposition값을 계속해서 값을 계속해서 0.10.1씩 감씩 감 소소
} }
if(theta[12] == 0.0) //theta[12]
if(theta[12] == 0.0) //theta[12]의 값이 의 값이 00이 되었이 되었 을 경우엔 자전거의 이동이 끝나고 이미 화면상에서 사 을 경우엔 자전거의 이동이 끝나고 이미 화면상에서 사 라졌을 때이므로
라졌을 때이므로 positionposition값을 값을 1212로 바꿔로 바꿔
주어서 자전거를 다시 화면 우상단에 위치시켜줌주어서 자전거를 다시 화면 우상단에 위치시켜줌 {{
position = 12.0;
position = 12.0;
direction2 = 1;
direction2 = 1;
}}
if(theta[12] == 1200.0) //theta[12]
if(theta[12] == 1200.0) //theta[12]의 값이 의 값이 120120 00이 되었을 경우는 자전거를 다시 우상단에이 되었을 경우는 자전거를 다시 우상단에
위치시켜
위치시켜 direction2=0direction2=0인 경우로 보내 인 경우로 보내 positionposition값과 값과 theta
theta값을 다시 감소시켜 준다값을 다시 감소시켜 준다 {
{
position = 12.0;
position = 12.0;
direction2 = 0;
direction2 = 0;
} }