본문 바로가기
반응형

분류 전체보기515

트리구조 게임브리오에서는 트리구조를 다룸에 있어서 가변형 배열(Array)를 사용하고 있습니다. 링크드 리스트를 이용할 경우 싱글 링크드 리스트를 이용한다면, 가변형 배열과 비슷한 자료 크기를 가지고 있습니다. 그러나 가장 큰 약점은 하나의 노드를 여러개의 노드가 자식으로 가질 수 없다는 점입니다. 그렇다고 해서 게임브리오가 이 조건을 만족하는가 하면 그것은 아닙니다. 게임브리오는 기본적으로 하나의 노드를 여러개의 노드가 자식으로 가질 수 없습니다. 트리를 구성함에 있어서는 다음과 같은 경우를 따져보아야 합니다. 하나의 노드는 여러개의 부모를 가질 수 있는가? 이 것은 트리를 설계할 때 가장 중요한 부분입니다. 그래픽 엔진을 개발할 때에는 이것을 허용하는 쪽으로 하는 것이 원칙이라고 생각됩니다. 그러면 함수면에서.. 2011. 9. 23.
Bitwise operation III 비트단위 연산은 알고리즘에서도 많이 사용할 수 있는데, 이제까지 봤던 간단한 형태의 연산에서 이제는 알고리즘이라는 것을 적용해보고자 합니다. 일단 보수라는 것을 살펴보도록 할께요. 보수(Complement)라는 것은 반대되는 수를 말합니다. 우리는 알게모르게 보수라는 개념을 많이 사용하고 있습니다. 34-16 을 계산할 때에도 보수라는 개념을 사용할 수 있습니다. 14-6=8 이라는 개념보다는 보수를 사용하면 뺄셈을 덧셈으로 대치할 수 있으니까요. 14-6=10+4-6=(10-6)+4=4+4=8 이란 개념이죠. 여기서 4는 6에 대한 10의 보수입니다. 이진수에서도 보수를 많이 사용하는데 크게 두가지의 보수를 많이 사용합니다. 1의 보수와 2의 보수입니다. 엄밀하게 이야기한다면 -1의 보수와 0의 보수라.. 2011. 9. 23.
Z Buffer vs. W Buffer 게임을 제작하다보면, 폴리곤 겹침에 의해서 겹쳐진 폴리곤이 카메라 이동에 따라서 심하게 떨리는 것을 경험해본 경험들이 있을겁니다. 이런 현상을 깊이싸움(Depth fighting)이라고 하는데, 이것은 카메라로부터 거리를 측정해서 기록하는 Z-Buffer가 표현할 수 있는 해상도 때문입니다. 폴리곤 사이를 충분하게 띄어주었고, Z-Buffer의 해상도를 24비트 정도를 썼다면 이런 현상은 대부분 벌어지지 않습니다. 최신 그래픽 카드는 W-Buffer를 지원하고 있는데, Z-Buffer와 비교해서 어떤 좋은 점이 있을까요? 이것을 이해하기 위해서는 카메라 투영변환(Projection transform)에 대해서 이해할 필요가 있습니다. 3D 그래픽에서 사용하는 카메라는 바늘구멍사진기(pin hole cam.. 2011. 9. 22.
Bitwise operation II 비트단위 연산자를 많이 사용하는 경우는 깃발 표시방법입니다. 이것을 일반적으로 비트 플래그(Bit flag)라고 합니다. 비트 플래그는 윈도즈 프로그램을 하다보면 아주 쉽게 찾아볼 수 있는데, 사용법도 간단해서 쉽게 이용할 수 있습니다. 비트 플래그는 각각의 비트가 1인 경우에는 플래그가 켜진 것으로, 0인 경우에는 플래그가 내려간 것으로 생각합니다. 빨간 깃발과 파란 깃발을 정의해서 해보도록 할께요. 빨간 깃발은 Bit 0 을, 파란 깃발은 Bit 1 을 차지하고 있습니다. 이것을 비트 연산으로 처리한다면, 다음과 같이 할 수 있습니다. 비트 플래그들은 모두 2의 멱승으로 구성됩니다. 추후 패킹에서는 보다 일반적인 방법을 설명하겠지만요. RedFlag = 1, BlueFlag = 2 1) 빨간 깃발 올.. 2011. 9. 22.
Culling vs. Clipping 실시간 3D 그래픽을 하는데 있어서 가장 중요한 것 중에 하나가 바로 어떻게 하면 그래픽 속도를 높이는가가 아닐까 합니다. 그래픽 속도를 높이는데 있어서, 두가지 부분은 상당히 중요하다고 볼 수 있습니다. 대부분의 게임을 작성할 때, 하나의 모델은 여러개의 오브젝트로 나누어지게 됩니다. 오브젝트 안에는 vertex 정보, texture coordinate 정보, normal 정보 (이 정보는 없는 경우도 있습니다.) 가 기본적으로 있고요. 거기에 추가되는 정보가 material, texture 정보가 있습니다. culling을 위해서는 오브젝트 안에 기본적인 정보 이외에 bound 정보를 추가하게 됩니다. bound는 어떻게 구성하느냐에 따라서 성능의 차이가 생깁니다. 예를 들어서 box 형태라고 한다면.. 2011. 9. 21.
평면 분할 질문) 10개의 직선으로 평면 분할을 하면 몇개 까지 나오나요? 답변) 직선이 추가되면 평면 갯수는 추가된 직선에 의해 추가되는 교차점 갯수 + 1로 늘어나겠죠. 추가되는 교차점 갯수는 이미 그려져 있는 직선의 수가 됩니다. (교차점 하나당 두개의 평면을 가지고 있고 인접한 교차점과 평면을 공유하므로) 직선의 수가 0개일때 평면의 갯수는 1이고, 직선의 수가 1개일 때 평면의 갯수는 2가 되죠. (교차점이 발생하지 않았기때문에 1증가) 직선의 수가 2개일 때 평면의 갯수는 4가 됩니다. (+2 : 교차점 1개 발생) 직선의 수가 3개일 때 평면의 갯수는 7이 되고요. (+3 : 교차점 2개 발생) 결국, 초기값 1부터 시작해서 1부터 n까지 합하는 결과가 평면의 갯수가 됩니다. 그래서 총 평면의 수는 \.. 2011. 9. 21.
728x90