Graphics/OpenGL 18

동차좌표 (Homogeneous Coordinates)

동차좌표 (Homogeneous Coordinates)OpenGL에서의 동차좌표계는 4x4의 3차원 좌표 행렬을 4개의 수로 줄인 것입니다. 실제로 OpenGL에서는 4차원으로 연산이 이루어지는데 바로,(x, y, z, w)- x : x좌표- y : y좌표- z : z좌표 (우리가 흔히들 아는)- w : 점인지 선인지 표현 (0은 벡터, 1은 점)의 요소로 이루어진 동차좌표계를 사용합니다.3개의 좌표만으로는 점인지 선인지 알 수 없기 때문에 네번째 요소인 w를 사용하여 4차원으로 구별합니다. 이 동차좌표계는 3차원의 모든 상황들을 표현할 수 있습니다.1차원 점 : (x, 0, 0, 1)2차원 점 : (x, y, 0, 1)3차원 벡터 : (x, y, z, 0)이런 식으로 표현할 수 있습니다. 동차좌표를 사..

Graphics/OpenGL 2014.11.20

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