2011-01-30 19 views
1

Ogre3Dでモデルを作成しました。このモデルは任意の回転と位置の三角形で構成されています。多くのモデリングプログラムのようにモデルを「アンラップ」して、すべての三角形が2d(x、y)にマッピングされるようにしたいが、三角形のサイズは維持されている。これはデカールを適用するためのものです。テクスチャが適用されたときに伸びがないように、三角形サイズを維持する必要がある理由。これはそのように三角形のすべての変換されたバージョンが存在します戻るとテクスチャ座標の3Dから2D空間(三角形を使用)からポリゴンを外す

//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空間へのマッピングが問題になります。 3次元空間の三角形を2次元空間にどのようにして三角形を取得するかわからないので、すべての属性を保持しています(角度のあるビューからペリフェラルのビューに移動するなど)。

+0

誰もあなたに答えることができない場合は、ブレンダーのソースをチェックして、uvのアンラッピングが*どこかに*あるはずです。 https://svn.blender.org/svnroot/bf-blender/trunk/blender/ –

+0

さて、私はXSIでこれらの種類のアクションを見ていましたが、それらのどれも私がしようとしていたことを達成しませんでした。材料の上に平らになってほしいと思っています。しかし、提案をありがとう。 –

+0

与えられた頂点がxyの一意の点に写像されていると仮定しているかどうかはわかりません。トポロジカルなモデルが与えられている場合は、そのような方法で平面にマッピングすることは不可能です(単純な立方体を考えてみてください)。さらに、伸びを避けたい場合は、キューブの3つの面を単一の頂点平面上で共通の頂点を持つようにすべてをマップすることはできません。ですから、私はあなたが別々に三角形を扱わなければならないか、伸ばしをしなければならないと思います。後者の場合、少なくともいくつかの頂点は複数のマッピングを必要とします。 – Keith

答えて

0

私はベクトルとして頂点を考えます。

したがって、各ベクトルを正規化してから、Z座標を削除して、再度乗算を適用することができます。 即ちトリ= VEC1、VEC2、vec3、 vec1Length = vec1.getLength() newVec1 = vec1.normalize()* vec1Lengthこのよう

は、ベクトルの大きさを維持するが、2D平面にマップされます。 (これは数学的には正しいとは限りません)

これ以外の方法は、三角形自体を2次元平面として考えてから、そのベクトルをローカル空間を世界空間の2次元平面に変換する。

だから、たとえば、世界の起源は、あなたはそれに垂直なベクトルを見つけ、X座標として1つのベクトルを使用し、三角形自体が3点で規定される面である(0,0,0)

あり、あなたはyの定義を定義しています。あなたはまた、世界の起源からの "オフセット"を与える、あなたは世界の起源からのX、Yベクトルによってreprsented 2d平面にそれらを戻すことができます(すなわち、 、0)および(0,1))。多くの基本的なコンピュータグラフィックス書籍でこれを行うには数学が必要です。

関連する問題