1

そこで、Ogre3Dでモデルを作成しました。このモデルは、任意の回転と位置の多数の三角形で構成されています。多くのモデリングプログラムのようにモデルを「アンラップ」して、すべての三角形が2d(x、y)にマップされるようにしますが、三角形のサイズは維持されます。デカール塗布用です。テクスチャが適用されたときにストレッチが発生しないように、三角形のサイズを維持する必要がある理由。

これは私が進むことを考えていた方向でしたが、それを視覚化して正しいアルゴリズムを達成するのに問題があります:

//Verticies will have a converted bool;

func( triangle x):
     for each of x's vertices:
           map to x,y coordinates if not converted;
           check other triangles for common vertex if so call func(common_tri);

これが返されると、すべての三角形の変換バージョンが作成され、すべての三角形がラップ解除されてテクスチャ上に配置できるようになります。問題があるのは、x、yスペースへのマッピングです。3D空間から2D空間に三角形を作成して、そのすべての属性を維持する方法がわかりません(角度のあるビューからサーフェスの垂直ビューに移行するなど)。助けていただければ幸いです。

4

1 に答える 1

0

頂点をベクトルと考えます。

したがって、各ベクトルを正規化し、Z 座標を削除してから、乗算を再度適用することができます。つまり、tri = vec1、vec2、vec3、vec1Length = vec1.getLength() newVec1 = vec1.normalize() * vec1Length

これにより、ベクトルのサイズが保持されますが、2D 平面にマップされます。(または、そうすべきです。これが数学的に正しいとは限りません。)

これを行うもう 1 つの方法は、三角形自体を 2 次元平面と考え、そのローカル空間からベクトルをワールド空間の 2 次元平面に変換することです。

たとえば、世界の原点は (0,0,0) です。

三角形自体は 3 点で定義される平面であり、1 つのベクトルを X 座標として使用し、それに垂直なベクトルを見つけ、y 座標を定義します。X の外積 Y による Z を定義することもできます。これにより、世界の原点からの「オフセット」が得られます。次に、それらを世界の原点からの X、Y ベクトルによって表される 2D 平面にマップすることができます (つまり (1 ,0) および (0,1))。多くの基本的なコンピュータ グラフィックスの本には、これを行うための数学があるはずです。

于 2011-02-08T22:39:04.803 に答える