2009-11-18 3 views
6

는 내가 OpenGL을에서 MD2 파일을로드하려고하지만 난 대부분의 예제 프로그램은 단지 법선의지진이 MD2 파일 형식 (이론)

미리 컴파일 된 목록을 사용하는 것으로 나타났습니다. 이 같은 .....

//table of precalculated normals
{ -0.525731f, 0.000000f, 0.850651f },
{ -0.442863f, 0.238856f, 0.864188f },
{ -0.295242f, 0.000000f, 0.955423f },
{ -0.309017f, 0.500000f, 0.809017f },
...
...

확인이 ABIT 바보 들릴지 모르지만, 나는 각 모델은 서로 다른 삼각형 구성되어 생각하는 방법을 다음에 미리 컴파일 된 법선 한 세트를 사용할 수있는 것이 가능하다 모든 모델을 렌더링합니까? 이상한 것 같아서 어떤 아이디어라도 감사 할 것입니다.

답변

9

사전 컴파일 된 법선 표를 사용하고 조회 표를 사용하여 특정 경우에 '충분 함'을 선택할 수 있습니다. 각 삼각형은 뚜렷한 평면에 있으며 삼각형 자체가 아닌 정상적인 평면입니다.

예를 들어, 우리는 한 점을 상상해 볼 수 있습니다. 이 토론의 목적을 위해이 점을 구체로 확장하면 개념적으로 파악하기가 쉽습니다. 해당 구체 주위에 완벽한 원을 y 축에 그려 넣은 다음 매번 x 축에서 해당 원을 1도 회전하면 360 원으로 끝납니다. 각 서클을 따라 1도 간격으로 정상적으로 걸리면 360 ** 2 포인트가됩니다. 거기에서 법선은 구의 중심에서 구의 점까지의 벡터이며, 구를 가리키는 접선으로 구성된 평면의 법선입니다. 당신이이 구체의 모든 점에 대해이 두 점을 계산한다면 결국 법선의 미리 계산 된 표가됩니다. 이것은 거의 모든 상황에서 충분히 양호 할 것입니다. 이제 해당 데이터에 대한 조회 체계를 설계하면됩니다 (평면 -> 일반).

+0

이 문제를 해결할 수있는 자료가 있습니까? –

+0

아니요, 죄송합니다.이 문제는 저의 머리 꼭대기에서 벗어난 것이며, 수학에 대한 이해가 복잡합니다. –

+0

3 차원 기하학을 커버하는 대부분의 고급 수학 서적은 아마도 그것을 커버해야합니다. –

1

MD2 file format은 각 정점에 "일반 인덱스"가 지정되어 있으며 well-known table of normals에 대한 조회입니다. 나는이 법선이 구 주위에 분포되어 있다고 가정합니다. 아마도 모델을 작성한 도구는 각 정점에 대해 이러한 법선 중 가장 적절한 것을 선택했을 것입니다.

첫 번째 대답과 관련하여 매우면 처리 된 모델 (큐브와 같은)을 원한다면 각 폴리곤은 실제로 자체의 법선을 가지며 그 폴리곤을 구성하는 각 꼭지점은 동일한 법선 벡터를 사용해야합니다 . 그러나 부드러운 쉐이딩 (예 : 몸통)을 원한다면 폴리곤의 각 정점이 다른 법선 벡터를 갖는 것이 일반적입니다. 이를 통해 다각형 전체에서 조명이 달라지며, 이는 버텍스 별 및 픽셀 별 조명 시나리오에서 유용합니다.

+0

정점 법선에 대해 이야기하고 있다면, 당신은 여전히 ​​정상적인 다각형 자체에 대해서 말하고있는 것이 아닙니다. 당신은 여전히 ​​법선을 가진 평면에 대해 이야기하고 있으며, 그 평면은 보통 정점이 발생하는 지점에서 모양의 의도 된 곡률에 수직으로 구성된 평면 이도록 취해집니다. –

+0

저는 처음 단락에서 생각하고있는 점을 분명히하려고 애 썼습니다. MD2 모델의 경우 각 삼각형의 접선 평면이 아닌 각 꼭지점에서 접하는 평면을 고려하는 것이 더 유용하다고 생각합니다 (처음에 답을 읽는 방법). 내 답변에 대한 귀하의 의견에서 나는 같은 페이지에 있다고 생각합니다. –

+0

나는 위험한 그래픽 작업을 해왔지만 그 정도는 알지 못했습니다. 나는 수학에서 충분히 강해져 무슨 일이 일어나고 있는지 알아 내려고합니다. 첫 번째 단락은 질문에 답을 얻으려는 시도였습니다. 옆으로, 다각형 자체에있는 평면의 법선은 쓸모가 없습니다. 조명에는 사용되지 않습니다 (예 : 물리 엔진이나 충돌 감지 또는 ... 등). –

5

이미 답변되었지만 좀 더 밝혀주고 싶습니다.

표에는 단위 구면을 매우 균일하게 덮는 벡터가 포함되어 있습니다. 162 벡터 집합이 subdividedicosahedron의 모서리라고합니다. 이것은 단위 길이의 3D 벡터를 인덱스 (8 비트)로 손실 적으로 압축하기 위해 수행됩니다 (vector quantization 참조). 임의의 법선 벡터를 저장하기 위해 테이블을 검색하여 가장 가까운 일치 항목을 찾고 대신이 일치 항목의 색인을 저장할 수 있습니다. 162 개의 잘 분산 된 벡터로 구성된이 테이블을 사용하면 원래의 벡터와 근사 된 벡터 사이의 각도가 11 ° 이하가 될 것으로 예상되어 Quake2 엔진에 충분할 것으로 보입니다.