본문 바로가기

UML Index 원래 포스팅 하던 개인 프로젝트 "오픈지엘을 이용한 게임 엔진 만들기"에 대한 작업물에 대한 설계 문서를 만드는 과정에서 설계에 대한 어느 정도 지침이 필요 할 거 같아서 이 포스팅을 준비 했어요. 설계 하면 역시 다이어그램(그림으로 표현되는 설계자와 개발자 간의 소통 언어 쯤…)을 해야 하고, 그 부분에 대해서는 무료로 배포되고 있는 StarUML 툴을 사용 하기로 정했어요. StarUML 홈페이지 툴과 함께 더불어 실제 어떻게 연관되어 사용되는지에 대한 예제로 포스팅 해볼 생각 에요. 개인적으로 시간은 많이 걸리나 한번 만들고 나면 프로그램 구현에 대한 엄청난 시간 단축과 편리한 유지보수를 할 수 있다고 생각하기 때문에 본디 하던 포스팅을 일시정지 시키고 이 포스팅을 준비하는 거에요. 물론, 공부하면.. 더보기
OpenGL Transformations_Using Own Matrix 이번에는 자신만의 행렬을 만들어서 사용 하는 방법에 대해서 얘기할 게요. 행렬에 대한 이론과 OpenGL의 변환에 대한 이론은 아래를 참고 하시면 될 거 같아요. 행렬에 대해서 보러 가기 OpenGL 변환 행렬은 그 생김새가 아래와 같이 되어 있어요. 그럼 위의 형태를 구현하려면 보통 2차원 배열을 생각하게 되겠죠? OpenGL에서 주의해야 할 것은, 원소에 접근 할 때 일반적으로 수학에서 생각하는 것처럼 행-열의 순번으로 원소를 가져오지 않고 열-행의 순서로 접근 한다는 거에요. 말 인즉, m3의 원소를 접근하고 싶으면 m[3][0]로 접근하는게 아니라 m[0][3]이라는 얘기죠. OpenGL이 열 중심(Column major)의 정책 이라서 딱히 뭐라고 할 여지는 없어요 :) 비단 여기에서 뿐만 아니.. 더보기
OpenGL Transformations_Projection 프로젝션이라 함은 보통 같거나 낮은 차원으로 해당 좌표가 어디에 매칭이 되는지에 대한 짝을 만들어 내는 과정이라고 볼 수 있어요. 음… :) 말이 좀 어려운가요?ㅋㅋ 우리가 현재 작업하는 내용은 3차원 상에서 이루어 지는 내용인데 반해서, 보게 되는 화면은 2차원(모니터) 가 되는 거에요. 모니터 상에는 내가 이루어 놓은 3차원 세계가 어떻게 보이게 되나- 예전 포스팅에서도 몇 번(특히나 코드 내에서) 언급 되긴 했지만 어떻게 동작하는지, 시키는지에 대해서 중점적으로 보려고 합니다 :D 물론, 아름답게 함수로 이루어져 있기 때문에 우리는 불러다 쓰면 되긴 하지만 결과가 어떻게 나오는지 알아야 불러다 쓰잖아요~ :D 프로젝션 변환을 설정 하는 것은 바로 뷰잉 볼륨(Viewing Volume)이라는 것을 만.. 더보기
OpenGL Transformation_Matrix 실질적인 OpenGL 코딩 시 처리되는 행렬에 관한 포스팅 이에요. 여태까지 왜 행렬에 대해서 공부했는지, 행렬이 왜 필요한지에 대해서 엄청 많이 언급 했어요. 이해가 안 되시는 분들은 지난 포스팅을 참조해 주세요 :) 단순히 하나의 행렬이 아닌, 여러 개의 행렬이 사용 된다는 것은 봐왔어요. 그럼 이게 내부적으로 어떤식으로 동작하는 지에 대해서 설명 할게요. 행렬은 앞으로 연산이 될 순번에 맞춰서 스택에 쌓이게 됩니다. (스택에 대해서 모르시는 분들은 구글링 ㄱㄱㄱ!!) 스택은 아래와 같이 세가지 종류가 있으며, 각기 연산된 행렬에 의해서 우리의 화면에 결과가 뿌려지는 거죠. The modelview matrix stack The projection matrix stack The texture matr.. 더보기
OpenGL Transformations_Modeling 3차원 세계에서 변환이라는 것은 물체를 옮기는 것을 의미 해요. 앞선 포스팅에서 카메라에 대해서 볼 때 미리 보긴 했지만, 정점들의 위치를 바꾸는 것이죠.(그 전에도 기본적인 개념에 대해서는 구구절절 설명 했어요 :D) OpenGL에서는 다음과 같은 함수로 정점들의 위치를 "이동" 할 수 있어요. 함수 원형 void glTranslatef(GLfloat x, GLfloat y, GLfloat z); void glTranslated(GLdouble x, GLdouble y, GLdouble z); 인자 x, y, z : 각 축에 대해서 이동시킬 양 반환 값 void 처리 임의의 정점들을 x, y, z만큼 이동 시키는 행렬을 현재 행렬에 곱한다. 함수의 이름에서 그 인자의 타입에 대해서 바로 알 수 있도록 .. 더보기