도형 그리기 및 이동
2014. 11. 3. 10:19
개발/Open GL
반응형
개요
마우스 드래그로 도형을 그리고 키보드 방향키를 눌렀을 때 그려진 도형이 이동
소스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #include <gl/glut.h> #include <stdio.h> /** * 도형이동크기 */ #define Move 0.05 /** * Mouse 좌표 계산 */ GLint TopLeftX, TopLeftY, BottomRightX, BottomRightY; /** * 현재 도형 좌표 */ GLdouble X1, X2, Y1, Y2; /** * My Display */ void MyDisplay(){ glViewport(0, 0, 500, 500); glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.5, 0.5, 0.5); glBegin(GL_POLYGON); glVertex3f(X1, Y1, 0.0); glVertex3f(X1, Y2, 0.0); glVertex3f(X2, Y2, 0.0); glVertex3f(X2, Y1, 0.0); glEnd(); glFlush(); } /** * Start Mouse */ void MyMouseClick(GLint Button, GLint State, GLint X, GLint Y){ if (Button == GLUT_LEFT_BUTTON && State == GLUT_DOWN){ TopLeftX = X; TopLeftY = Y; } } void MyMouseMove(GLint X, GLint Y){ BottomRightX = X; BottomRightY = Y; //마우스로 인해 그려지는 도형의 좌표 값 X1 = TopLeftX / 500.0; X2 = BottomRightX / 500.0; Y1 = (500 - TopLeftY) / 500.0; Y2 = (500 - BottomRightY) / 500.0; glutPostRedisplay(); } /** * End Mouse */ void MySpecial(int key, int x, int y){ //키보드 방향에 따른 위치이동 switch (key){ case GLUT_KEY_LEFT: X1 -= Move; X2 -= Move; printf("[Debug] : left %f,%f\n", X1, X2); break; case GLUT_KEY_RIGHT: X1 += Move; X2 += Move; break; case GLUT_KEY_UP: Y1 += Move; Y2 += Move; break; case GLUT_KEY_DOWN: Y1 -= Move; Y2 -= Move; break; } glutPostRedisplay(); } void MyInit(){ glClearColor(1.0, 1.0, 1.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); } int main(int argc, char **argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB); glutInitWindowSize(500, 500); glutInitWindowPosition(0, 0); glutCreateWindow("Second"); MyInit(); glutDisplayFunc(MyDisplay); glutMouseFunc(MyMouseClick); glutMotionFunc(MyMouseMove); glutSpecialFunc(MySpecial); glutMainLoop(); return 0; } |
결과
반응형
'개발 > Open GL' 카테고리의 다른 글
이미지 불러오기 (0) | 2014.11.21 |
---|---|
정육면체 그리기 (0) | 2014.11.21 |
[빌드 오류] failure during conversion to COFF: file invalid or corrupt (0) | 2014.10.17 |
Menu & SubMenu 생성 (11) | 2014.10.09 |
freeglut API 설치 (0) | 2014.09.29 |