라인이 끊기는 문제는 z-fighting 때문입니다. 외곽선의 라인을 구성하는 픽셀과 안쪽 폴리곤의 픽셀이 각각 그려졌을때, 미세하게 각 픽셀의 z 좌표가 어떤 경우에는 라인이 앞쪽일때도 있고 뒤쪽일때도 생기면서 라인이 끊어지는 것이지요. 간단한 해결방법은 라인의 z 좌표들을 약간 화면 앞쪽으로 당겨서 찍어주는 것입니다. 하지만 근본적인 해결책은 안되고, 제대로 해결하기 위해서는 z-버퍼 검사 옵션과 쓰기 옵션을 조절해가면서 찍어야 합니다. Real-time Rendering 책에 보면 나와있는데 지금 기억이 잘 안나네요.
라인의 두께 조절 문제는 ID3DXLine 의 SetWidth 같은 것을 이용해보시면 어떨지요? 전 써본 적이 없습니다만.. 아니면 볼륨 뿔려서 단색으로 한번 더 찍기 방법으로 바꾸는 것을 검토해볼 필요가 있습니다.
그리고 프레임이 떨어지는 문제는, 아웃라인의 판별이 모두 cpu 에서 이루어지기 때문에 cpu 측에서 병목현상을 일으키는 것이 아닐까 추측됩니다. 소스를 보거나 프로파일 결과를 보기 이전엔 단정할 수는 없지만 말입니다. 속도를 빠르게 하기 위해서는 어느 부분에서 속도가 느려지는 것인지를 알아내는 것이 가장 중요합니다
1. CPU 때문에 느려지나? 2. AGP 버스때문에 느려지나? 3. 버텍스 쉐이더 때문에 느려지나? 4. 픽셀 쉐이더(fill-rate) 때문에 느려지나?
CPU 때문에 느려지는지 여부의 판단법 : CPU 속도에 따라 프로그램의 수행속도가 비례한다면 CPU 가 병목지점임 (바이오스에서 CPU 를 단계별로 언더클럭)
원인 : CPU 에서 계산을 너무 많이 한다, DrawPrimitive 를 너무 많이 호출한다 (폴리곤들을 충분히 모아서 찍지 않았음 - 메터리얼별 소트를 하지 않았거나, 버텍스 버퍼를 최대한 모으지 않았음), GPU 를 Stall 시키는 일이 있다 (현재 사용중인 그래픽 카드상의 자원에 대한 lock 을 시도했을 경우)
AGP 때문인가 ? : 바이오스에서 AGP 를 1x, 2x 로 바꿨을때 속도가 느려진다면 AGP 가 병목지점임
원인 : 버텍스 사이즈가 너무 큼. 버텍스의 크기가 32의 배수가 아닌 버텍스를 지나치게 랜덤억세스 했음
버텍스 쉐이더 때문인가 ? : 버텍스 쉐이더를 짧은것, 중간 것, 긴 것 3 가지로 적용했을때 속도가 비례한다면 버텍스 쉐이더가 병목지점임
원인 : 버텍스 쉐이더가 너무 복잡할 경우. 더 간단한 것으로 줄여야 함
픽셀 쉐이더 때문인가 ? 화면의 해상도를 변경했을때 그것에 비례해서 프로그램의 속도가 느려진다면 CPU 가 병목지점임
원인 : 너무 여러개의 텍스춰 어드레싱 연산을 하거나, 칼라 값 연산을 많이 했음 (GeForce3 FAQ 참조)
만약 원인이 CPU 였다면, 다른 방식의 카툰렌더링 구현을 시도해보는 것이 좋을 것 같습니다. 단색으로 확대해서 두번찍기 방식은 주로 CPU 이외의 부분으로 부하가 이동되는 효과가 있으니까요
라인문제는 지금 ID3DXLine 을 써봐야겠어요..
프레임은 아웃라인판별을 모두cpu에서해주고 값이업는 폴리곤들까지 찍어줘서 생기는게 아닌가 하네요;;;
후~ 감사합니다; 태~에산이로다 ^_^;;
p.s
아 스타리플봣는데요 ^^;;
돈을 모아두시면 안된다는 말을 하고싶어요 ^^;;
어떤유닛이든 게속 만들구~확장계속하구 그러다보면 컨트롤두 늘구 나름대로 전략도 생기구 ^_^;
답변 너무 감사드려요 ^_^
헉 ID3DXLine 은 DX9.0함수 ㅠ_ㅠ;;; 8.1 로 작업하고있는뎀;;;;;; 다른방법을 찾아봐야겠네요;;