2013-07-03 1 views
1

난 그냥 지금 정말 바보 인거야하지만이 할 수있는 정말 좋은 방법을 생각 할 수없는 것 같아요 : 생성하는 수직 법선 큐브

은 기본적으로 내가의 부하를 만드는 오전

DirectX의 큐브와 VertexPositionColor를 사용하여 데이터를 저장합니다. 큐브를 효율적으로 저장하려면 큐브 당 8 점만 저장하면됩니다. 문제는, 각 얼굴의 법선이 정면의 법선이 (0, 0, 1)이고 뒷면의 법선이 (0, 0, -1) 인 점을 지적하고 싶습니다.

내 문제는 어떻게 8 포인트 큐브에서만 효율적으로 수행 할 수 있는지를 알아내는 것입니다. 24 포인트 큐브 표현으로 쉽게 할 수 있다는 것을 알고 있지만 이것은 메모리 관점에서 보면 비효율적 인 것처럼 보입니다.

어떻게하면됩니까? 가급적 셰이더 또는 무언가에서 효율적입니까?

감사

답변

0
당신은,이, 56 * 4 바이트 대신 96 * 4 바이트가 될 것입니다 각면 + 4 개 * 6 개의 int, 8 × 수레 것 일부 메모리를 저장 indecies를 사용할 수

하지만 모든입니다 큐브간에 몇 가지 포인트가 공유되지 않으면 않는 한 할 수 있습니다.

0

쉐이더 모델 3 이하의 경우 각 꼭지점에서 3 개의 법선을 초과하여도 괜찮 으면 꼭 꼭 꼭 복제해야합니다.

셰이더 모델 3+에서 인덱스 버퍼를 셰이더에 표시하고 SV_VertexID를 사용하여 버텍스/선체 셰이더의 3 개의 정점에서 법선을 계산할 수 있지만 항상 8 개의 정점을 출력하므로 다음 단계로 보낼 수 없습니다 .

기하학/도메인 쉐이더에서 법선을 계산할 수있는 삼각형을 볼 수 있습니다.

큐브 버텍스 복제는 OK이며 큐브로드를 생성하기 때문에 geometry instancing을 사용하십시오.