2010-11-20 16 views
0

私は3DエンジンをAS3.0用に書いています...そして、迷惑な問題に遭遇しました。 AS3.0は現在、アフィンビットマップ変換だけをサポートしています(3Dは管理が難しいので、私はエンジンを書いています)。つまり、大きな頂点で真の視点を得ることはできません。3Dエンジン - 頂点の分割を正しく行う方法

私は...ループを行い、そのZ位置に基づいて、ビットマップの各ピクセルをレンダリングする...しかし、視点が非線形であるため、それは、ほとんどのコンピュータが行うことができますよりも1000倍以上のものである可能性があり

したがって、解決策は、頂点を自動的に分割することです(プログラマ/モデラーはそれを行う必要はありません)ので、小さな三角形にします。

残念ながら、これは不安定です...?アフィン変換が十分に正確ではありません、またはだろうが、彼らは他の三角形に収まらないだろう...画像は発揮します

(死ん画像)あなたが上で見ることができるように

赤い部分、彼らは非常に不安定で、最も目立つのはフロントミドル欄です。

だから私は間違っているのですか?これはSandy、away3D、Alternativaでどのようにしていくつかの視点でいくつかの名前を付けるのですか?

EDIT

public static function transformTriangle(bd:BitmapData, pts:Vector.<Point>, gfx:Graphics):void { 
    var matrix:Matrix = new Matrix(); 
    matrix.tx = pts[0].x; 
    matrix.ty = pts[0].y; 
    matrix.a = (pts[1].x - pts[0].x)/bd.width; 
    matrix.b = (pts[1].y - pts[0].y)/bd.height; 
    matrix.c = (pts[2].x - pts[0].x)/bd.width; 
    matrix.d = (pts[2].y - pts[0].y)/bd.height; 
    gfx.beginBitmapFill(bd, matrix, false, true); 
    gfx.moveTo(pts[0].x, pts[0].y); 
    gfx.lineTo(pts[0].x, pts[0].y); 
    gfx.lineTo(pts[1].x, pts[1].y); 
    gfx.lineTo(pts[2].x, pts[2].y); 
    gfx.lineTo(pts[0].x, pts[0].y); 
    gfx.endFill(); 
} 

EDIT :

:ここは、変圧器の小さなデモです私は三角形に変換するため使用していたコードは次のようになります

ここをクリック(デッドリンク)

(青い点を制御する矢印、選択されたハンドルを変更する1-3) - 数字の数字キーと数字キーの両方を試してください。

+1

drawTrianglesを使用していますか? – Zevan

+0

いいえ。BitmapDataを三角点に正しく変換するポストbtwにコードを入れていますので、問題はないと思います。結局のところ、私はパフォーマンスのために既にベクトルを使用しているので、私はdrawTrianglesに移植するかもしれません。 –

+1

代わりにdrawTrianglesを使ってみると、問題が解決すると思います。ここにdrawTrianglesとzソートに関連する記事がありますhttp://actionsnippet.com/?s=drawTriangles&searchsubmit=Search – Zevan

答えて

1

代わりにdrawTrianglesを試してみてください。ここにdrawTrianglesとzソートに関連する投稿があります。link

関連する問題