Graphics 87

glPush, PopMatrix, Ortho 등

glPushMatrix(); & glPopMatrix();이 둘을 행렬스택이라 한다.물체의 위치를 지정할 때 마다 단위행렬을 사용하여 모델뷰 행렬을 초기화 하는 방법은 바람직하지 못~해~특히나 지금 상태를 저장했다가 나중에 또 써야하는 경우도 종종 있규, 매번 원점으로 돌아가는게 아니라 특정 변환을 거친 상태로 돌아가야 하는 경우도 있기 때문이다.요때 사용되는 것이 바로 이 행렬스택 행렬스택은 모델뷰행렬과 투영행렬을 저장해두는 일종의 저장공간으로, 다른 프로그램 스택과 마찬가지로 현재 행렬을 스택에 저장해두었다가 필요할 때 꺼내쓰면 되는것이다 원래 좌표축glPushMatrix(); // 현재 좌표축 저장        :   회전, 변환        :glPopMatrix();  // glPushMatri..

Graphics/OpenGL 2014.05.27

glutGameModeString, EnterGameMode 등

정맥주사 시뮬레이터를 개발할 당시의 코드 중 GLUT가 사용된 부분의 일부이다.  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); if (!prefWindowed) {  if (prefRefresh) sprintf(glutGamemode, "%ix%i:%i@%i", prefWidth, prefHeight, prefDepth, prefRefresh);  else sprintf(glutGamemode, "%ix%i:%i", prefWidth, prefHeight, prefDepth);  glutGameModeString(glutGamemode);  glutEnterGameMode(); } else {  glutInitWindowSize(prefWidt..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : Win32 예제

그냥 맛보기로 윈도우 환경 OpenGL 예제를 한번 보자. 윈도우 환경이 제공되는 경우라면 굳이 GLUT를 쓰지 않아도 구현이 가능하다.GLUT는 앞서 말했듯 플랫폼 독립성을 보장하기 위해 윈도우를 지원하지 않는 운영체제에서도 사용가능하기 위해 존재하는 라이브러리다,때문에, 윈도우가 있는 윈도우 운영체제에서는 GLUT없이도 구현이 가능한 것이다. 그럼, GLUT없이 구현된 OpenGL Win32예제를 보겠다. GLUT를 추가하지 않았기 때문에, 프로젝트 구성요소에서 입력부분에 라이브러리 링크를 달아줘야한다. opengl32.lib;glu32.lib  #include #include #include //#include                  GLUT없이 하는 예제 LRESULT CALLBACK W..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : 애니메이션

애니메이션 GLUT는 반복적인 처리가 필요할 때 주로 사용되는 타이머 이벤트도 제공한다. void glutTimerFunc(unsigned int millis, void (*func)(int value), int value);millis 후에 func함수를 호출하며 인수로 value를 전달한다.value는 타이머 콜백으로 전달되어 작업거리를 지시하는데 타이머의 용도가 하나뿐이라면 아무값이나 주어도 상관은 없다.콜백을 등록해 놓으면 millis 후에 콜백함수가 호출된다.일반적인 타이머와는 다르게 주기적으로 호출되는게 아니라 딱 한번만 호출된다.주기적으로 계속 호출하려면 콜백함수에서 자신을 계속 호출해야한다.불편하긴 하지만, 호출될때마다 다음 주기를 가변적으로 설정할 수 있다는 점에서 활용성은 더 높다. 애..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : 팝업메뉴

팝업메뉴는 기능의 목록을 문자열 형태로 나타낼 수 있으니, 사용법을 외우지 않아도 쉽게 이해할 수 있다는 장점이 있다. 이미 예제를 통해 만들어본 적이 있다. int glutCreateMenu(void (*func)(int value));인수로 메뉴항목을 호출했을 때 호출될 콜백함수를 지정한다.콜백함수는 선택될 메뉴 항목의 ID를 인수로 전달받는다. void glutSetMenu(int menu);int glutGetMenu(void);새로 생성된 메뉴는 자동으로 현재 메뉴가 되므로 굳이 glutSetMenu를 호출하지 않아도 상관없다. 둘 이상의 메뉴를 생성해놓고 번갈아가면서 사용하고 싶다면 glutSetMenu가 필요하다. void glutDestroyMenu(int menu);메뉴를 삭제한다. vo..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT : 입력처리

GLUT를 이용해서 입력을 처리해보자 그래픽 프로그램의 주된 기능은 출력이므로 입력기능은 사실 필요없지만, 사용자의 지시를 받아서 그래픽 상태를 변경하거나, 실행중에 변화를 관찰해보기 위해서는 입력기능이 필요하다.GLUT는 기본적인 입력기능을 지원한다. 아래 함수들로 콜백을 지정하면 입력시 해당 함수가 호출된다. void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));void glutSpecialFunc(void (*func)(int key, int x, int y));void glutMouseFunc(void (*func)(int button, int state, int x, int y));각 콜백이 등록하는 입력함수의 원형은 인수목록..

Graphics/OpenGL 2014.05.27

OpenGL 기초 - GLUT

GLUT문자기반의 콘솔에 화려한 그래픽을 수놓을 수 없기 때문에 윈도우가 필요하게 됩니다.하지만!윈도우를 사용하게 된다면, 플랫폼 독립성을 보장할 수 없습니다. 오로지 윈도우 운영체제에만 의존해서 작동하게 되기 마련이니까요, 그래서 나온것이 GLUT입니다. GLUT는 그래픽과는 거의 상관없는 기능이며 그래픽을 그리기 위한 껍데기를 만들어주는 것입니다.그래서 OpenGL 학습을 위해서는 GLUT를 우선적으로 연구해봐야 하는것입니다. 주요함수만 간단하게 훑고 지나가겠습니다.깊어지면 타겟 플랫폼의 AUX를 사용해야 하기 때문에 포스팅이 너무 길어집니다.  void glutInit(int *argcp, char **argv);이 함수는 GLUT라이브러리를 초기화하고 기반 플랫폼의 윈도우 시스템과 연결합니다.인수..

Graphics/OpenGL 2014.05.19

OpenGL 기초 - 안티앨리어싱

쉽게말해경계선의 계단현상을 앨리어싱이라고 하는데, 이를 보간해주는 걸 안티앨리어싱(Anti-Aliasing)이라고 합니다.앨리어싱 : 계단현상, 색상간의 이질감  앨리어스의 주된 원인은 너무 뚜렷한 색상 차이입니다. 앨리어스를 제거하려면 보통 두 색상간의 경계면에 중간색을 삽입하는 경우가 대부분입니다. 다음 함수로 점, 선, 다각형에 안티앨리어싱을 적용할 수 있습니다. glEnable(GL_POINT_SMOOTH);glEnable(GL_LINE_SMOOTH);glEnable(GL_POLYGON_SMOOTH); 블렌딩을 켜고 안티앨리어싱을 키면 OpenGL이 알아서 앨리어스를 제거합니다.물론, 추가연산을 해야하기 때문에 시간은 좀 더 걸립니다. 속도와 품질은 항상 반비례관계에 있습니다.속도가 빠르면 품질은..

Graphics/OpenGL 2014.05.17

OpenGL 기초 - 블렌딩

화면에 그려진 그림은 색상버퍼라는 메모리에 저장됩니다.그림이 이미 그려진 상태에서 같은 위치에 다른 그림을 그리면 새 그림을 새 메모리에 기록하기 때문에, 이전에 있던 그림에 덮어져서 그려지게 됩니다. 이런 당연한 현상도 블렌딩 모드를 변경하면 달라질 수 있습니다.블렌딩은 색상버퍼에 이미 기록되어있는 값과 새로 그려지는 값의 논리연산방법을 지정해 줍니다. 블렌딩 기능을 사용하려면 다음 명령으로 요고를 적용시켜야 합니다. glEnable(GL_BLEND); 블렌딩은 색상버퍼에 이미 기록된 값 D와 새로 기록되는 값 S와의 연산을 정의합니다.연산방법은 다음 두 함수로 정의됩니다. void glBlendFunc(GLenum sfactor, GLenum dfactor);void glBlendEquation(GL..

Graphics/OpenGL 2014.05.17