본문 바로가기

Coding/Game Programming9

.MAP 파일로 만드는 BSP (7) - 평면에 대해 폴리곤 판별하기 평면에 대해 폴리곤을 판별하기 라는 것은 매우 일반적인 방법이다. 이를 하기 위해 우리가 알아야 할 것은 폴리곤이 앞에 있는가, 뒤에 있는가, 평면상에 있는가, 평면에 걸쳐져 있는가 이다. (그림 참조) 평면에 대해 폴리곤을 판별하는 것은 꽤 간단하다. 평면의 방정식인 n · x + d = 0 을 사용하면 평면에 대해 어떤 점이라도 판별할 수 있다. 만일 그 결과가 양의 값이라면 그 점은 평며늬 앞에 있다. 음의 값이라면 뒤에 있는 것이고, 0이라면 평면상에 존재하게 된다. 아래 는 평면에 대해 폴리곤을 판별하는 것에 대한 의사코드이다. int iFront, iBack, iOnPlane; for n = 0 to NumberOfVertices – 1 { double result = n.Dot ( verti.. 2010. 12. 22.
.MAP 파일로 만드는 BSP (6) - 모든 브러쉬에 대해 CSG 수행하기 자, 이제 우리는 모든 브러쉬에 대해 텍스처 좌표계를 포함하고 있는 올바른 폴리곤을 갖기 위해 올바른 폴리곤을 생성하여야 한다.올바른 폴리곤을 얻으려면, 엔터티 안에 있는 모든 브러쉬에 대해 CSG (Constructive Solid Geometry) 연산을 수행해야 한다. 다음 그림은 왜 CSG 연산이 필요한지 보여준다. CSG가 하는 일은 오버래핑 되어 있는 모든 폴리곤과 다른 브러쉬 내부에 존재하는 폴리곤들을 제거하는 것이다. 이것은 폴리곤의 수를 감소시켜 줄 뿐만 아니라 BSP 트리를 생성하는데 사용되는 지오메트리를 생성하는 일도 한다. .MAP 파일을 사용하는 대부분의 엔진은 BSP 트리를 사용한다. 다음 그림은 CSG가 하는 일을 보여주는 그림이다. 폴리곤들에 대해 CSG를 수행하는 두 개정도.. 2010. 12. 9.
.MAP 파일로 만드는 BSP (5) - 버텍스 소팅하기 모든 버텍스에 대해 텍스처 좌표계를 가지고 있는 유효한 다각형을 구했다면 이미 꽤 온 것이다. 그러나 현재 버텍스들은 순서가 랜덤으로 되어 있다. Back face culling(은면제거)의 장점을 이용하려면, 각 폴리곤의 버텍스들은 시계방향 또는 반 시계방향으로 소팅 되어야 한다. (여기 필자는 폴리곤이 반시계 방향으로 컬링되게 하기 위해서 시계방향으로 소팅하는 걸 더 선호한다. 아울러 DX를 이용하여 렌더링 할거면 시계방향으로 소팅해야 한다.) 이 방법을 간단하게 약간만 조정하면 반시계 방향으로 버텍스를 소팅할 수도 있다. 버텍스를 소팅하기 위하여, 폴리곤의 노말을 이미 알고 있어야 한다. 폴리곤을 통하여 face의 노말은 쉽게 얻을 수 있기 때문에 이건 쉽다. 우선, 폴리곤의 센터(중심)를 계산해야.. 2010. 11. 25.
.MAP 파일로 만드는 BSP (4) - 텍스처 좌표 계산하기 텍스처 tu tv를 계산하는 공식은 다음과 같다. V : 텍스처 계산에 사용될 버텍스 nu/nv : 텍스처 axis normal w/h : 텍스처의 상대적 w/h su/sv : 텍스처 scale ou/ov : 텍스처 offset or Shift 해당값은 앞에 설명한 파일 포맷에서 가져온다. 앞의 UV 값에서 보면 [1 0 0 0] [0 -1 0 0] 이라고 할때, 앞의 괄호는 U, 뒤는 V에 해당하는 값인데, 앞의 세 숫자는 U의 노말, 즉 nu이고 V에서의 세 숫자는 nv이다. 괄호의 마지막 숫자는 각각 ou/ov이다. 그 뒤 나오는 숫자 세개, 0 1 1 에서 0은 의미없는 값이고 1은 su 마지막 1은 sv이다. 그런데, 텍스처 좌표계를 구할 때 문제점이 있다. 텍스처 좌표계들이 노말라이즈 되지 않.. 2010. 11. 25.