0

ブレンダーに小さな問題があります。

座標計画がおかしくなっているようです (y が前、z が上)。私はいくつかの調査を行いましたが、明らかにこれは「右手」のシステムであり、エクスポートで z を上に、y を前にすると変更できますが、私の問題は、x がまだ逆になっていることです。反転します (x = x * 1.0)。また、UV マップがおかしいので、V 座標 (v = 1.0 - v) を反転する必要があります。ブレンダーを「左手」システムで動作させる方法はありますか。D3D で使用するオブジェクトをエクスポートしているので、少し面倒です。

4

3 に答える 3

1

DirectX が左手座標系を使用することは正しいです。

MSDNのこの記事には、右利きのシステムからデータをインポートするために必要なことの説明が含まれています (あなたの質問から、Blender は右利きだと思います)。これらが主なポイントです

Direct3D は左手座標系を使用します。右手座標系に基づくアプリケーションを移植する場合は、Direct3D に渡されるデータに 2 つの変更を加える必要があります。

  • システムが正面から時計回りにトラバースするように、三角形の頂点の順序を反転します。つまり、頂点が v0、v1、v2 の場合、それらを v0、v2、v1 として Direct3D に渡します。

  • ビュー マトリックスを使用して、ワールド空間を z 方向に -1 ずつスケーリングします。これを行うには、ビュー マトリックスに使用する D3DMATRIX 構造体の _31、_32、_33、および _34 メンバーの符号を反転します。

Blender をそのままにして、D3D へのインポート時に上記の変更を加える方が簡単になる可能性があります。

于 2013-06-09T07:30:21.860 に答える
1

おそらく、あなたはずっと前にあなたの問題を解決したかもしれませんが、私の答えは他の人を助けるかもしれません. 私は同じ問題に遭遇しました。症状は (あなたの症状に加えて) レンダリングされたテスト キューブの UV 座標が間違っていました。その理由は、Blender が右手座標系でデータをエクスポートするためです。Wavefront をエクスポートするときに Blender の設定を変更しても役に立ちません。解決策は、Z、Normal-Z、Texture-V を反転し、頂点配列のインデックス配列または頂点順序を変更して、頂点の描画順序を元に戻すことです。

// Invert every Z coord of v entry:
z = -1.0f * input.z;

// Invert every Z coord of vn entry:
nz = -1.0f * input.nz;

// Invert every V coord of vt entry:
tv = 1.0f - input.tv;

...
// When assembling vertices:
// Revert face order from 0->1->2 to 2->1->0, depending on your implementation.
于 2016-10-13T19:50:46.680 に答える