본문 바로가기

Programming/OpenGL

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만큼 이동 시키는 행렬을 현재 행렬에 곱한다. 함수의 이름에서 그 인자의 타입에 대해서 바로 알 수 있도록 .. 더보기
OpenGL Transformations_Viewing(Camera) 옆에 부제로 카메라를 붙여 두었던 이유가 있겠죠~? 넹~ Viewing은 Camera에 관련된 거에요. 이전 포스팅들에서는 테스트를 위해서 간단한 설명들만 했지만, 이제 조금 더 들어가 봐야겠죠?(해치지 않아요 -_-*) OpenGL에서 transformation과 viewing에 관련된 가장 중점이 되는 부분이 Camera에요. 기본적으로 OpenGL의 카메라는 z축의 음수 방향을 바라보고 있습니다. 바로 아래 처럼 말이죠. 이러한 카메라가 가지는 coordinate는 오브젝트가 가지는 coordinate와는 별개입니다. Viewing Transformation는 장면(Scene)을 적용시키는 첫 번째 변환이며, 어디에서 어디를 바라보고 있는가를 알아야 해요.(원문에서는 aim 이라고 표현했는데, 포커.. 더보기