2011-02-08 1 views
2

DirectX7을 사용하여 2 차원 (z 좌표가 0)의 버텍스 및 인덱스 버퍼를 사용하여 3D 효과를 만들려고합니다.다이렉트 버텍스 렌더링 : 트 랫코 이드에 대해 올바르게 표시 할 텍스처를 얻을 수 없습니다.

그것은 사진과 함께 설명하는 것이 더 쉽습니다 :

Problem's illustration

문제는 선이 깨진 것입니다. 그들은 똑바로되어야합니다. 이 이미지를 렌더링하기 위해 삼각형으로 헤어지고 DrawIndexedPrimitiveVB를 사용하여 렌더링됩니다. 분명히 각각의 삼각형은 약간 다르게 왜곡되어 있고 나는 왜 보이지 않습니다.

여기 뭔가 사소한 것이 있습니까? 이 도움이 될 것입니다 경우

는 잘 모르겠지만, 소스 및 대상 쿼드는 다음과 같습니다 :

SPoint4:= pBounds4(1, 1, W - 2, H - 2); 
    DPoint4:= Point4(ProjTo2dX(i, FlyDist + DeepDist, W), ProjTo2dY(0, FlyDist + DeepDist, H), ProjTo2dX(W - i, FlyDist, W), ProjTo2dY(0, FlyDist, H), ProjTo2dX(W - i, FlyDist, W), ProjTo2dY(H, FlyDist, H), ProjTo2dX(i, FlyDist + DeepDist, W), ProjTo2dY(H, FlyDist + DeepDist, H)); 

답변

0

내가 솔루션 또는 적어도 해결 방법을 발견했다. 이미지를 2 개의 삼각형으로 나누는 대신 여러 개의 삼각형으로 구성된 여러 가로 스트립으로 나누었습니다. 이 경우 이미지가 좋아 보입니다.

less broken lines

은이 경우에 화상 (10 개) 스트립 (20 개 삼각형)으로 분할된다.

의견이나 다른 솔루션에 만족합니다. 고맙습니다.

+0

3d 재료를 피하기 위해이 기술을 사용해야했기 때문에이 대답을 받아 들일 것이므로 필요할 경우 내 응용 프로그램을 DirectX에서 GDI로 폴백 할 수 있습니다. – Kaitnieks

+0

실제로이 방법은 문제를 해결하지 못합니다. 이제는 형상이 여러 번 동일한 문제가 발생합니다. 세분 된 메쉬의 삼각형 영역에 오류가 비례하기 때문에 눈에 띄지 않습니다. 당신은 GDI를 사용하는 것이 더 쉽다는 것을 옳습니다. 비록 2d와 관련이 없으며 픽셀 단위의 연산과 관련이 있습니다. – jheriko

+0

공식적으로 당신은 완전히 정확하지만 실제로는 충분하고 결함은 눈에 띄지 않습니다. 당시로서는 유일한 해결책이었고 개발자로서 해커임을 알았지 만 최종 사용자는 결과를 얻지 못하고 즐깁니다. 다음 번에 프로젝트를 열 때 Natan의 솔루션을 구현하려고합니다. – Kaitnieks

3

한 가지 방법을 참조하십시오 투영 보간이다. 이 작업을 수행하는 방법을 보여주는 an article을 작성했습니다 (정점/픽셀 쉐이더 사용).

짧은 버전 : 당신은 (당신이 눈치 챘을 수도로, 하지은 두 개의 삼각형 사이에 눈에 보이는 솔기를 생산 않습니다) GPU는 관점-올바른 렌더링을 위해 그것을 할 방법과 유사한 방법으로 쿼드에서 UV를 보간 . 이렇게하려면 쿼드의 각 정점에 대해 잘못된 "깊이"값을 계산하고이 "깊이"를 기반으로하는 동종 좌표를 사용하여 보간을 수행해야합니다. 자세한 내용은 위에 링크 된 기사를 참조하십시오.

+0

감사합니다.이 방법이 내 솔루션을 향상시킬 수 있지만 나중에 내 뇌가 잘 작동 할 때 읽어야합니다. – Kaitnieks

관련 문제