2011-02-08 9 views
2

DirectX7を使用して2d(z座標が0)の頂点およびインデックスバッファを使用して3D効果を作成しようとしています。DirectXの頂点レンダリング:菱形のために正しく表示するテクスチャを取得できません

それは絵で説明する方が簡単です:

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

実際には、これは問題を解決しません。エラーは細分化されたメッシュ内の三角形の面積に比例するため、ジオメトリ全体で同じ問題が複数回発生します。 2Dやピクセル単位の操作とは関係ありませんが、GDIを使用する方が簡単です。 – jheriko

+0

正式にはあなたは完全に正しいですが、実際には十分に十分であり、欠陥は目立っていません。当時、それは私の唯一の解決策でしたが、私は開発者としてそれがハッキーだと知っていましたが、エンドユーザーは結果を楽しんでいませんでした。私は次回プロジェクトを開くときにナタンのソリューションを実装しようとします。 – Kaitnieks

3

一つの方法は、射影補間です。私はこれを行う方法を示すan articleと書いています(頂点/ピクセルシェーダを使用)。

ショートバージョンは:あなたは(あなたが気づいたかもしれないとして、ないは二つの三角形の間に目に見える継ぎ目を作るん)GPUはパースペクティブ補正のレンダリングのためにそれを行う方法に類似した方法でクワッド間でUVを補間します。これを行うには、クワッドの各頂点に対して誤った「深度」値を計算し、この「深度」に基づいて同次座標を使用して補間を実行する必要があります。完全な詳細は、上記の記事にあります。

+0

ありがとう、これは私の解決策を改善するかもしれませんが、私の脳がより良く働くときは後で読む必要があります。 – Kaitnieks

関連する問題