2010-11-20 49 views
0

我正在爲AS3.0編寫一個3D引擎...然後我遇到了一個惱人的問題。 AS3.0目前僅支持仿射位圖轉換(3D太難以管理,這就是爲什麼我正在編寫引擎) - 這意味着我無法在大頂點上實現真正的視角。3D引擎 - 如何正確地頂點分割

我可以做一個循環,並呈現基於其Z位置的位圖的每個像素...但是那是後話1000倍以上,大多數電腦能做到的,因爲角度是非線性的...

所以 - 解決辦法是 - 自動分割頂點(所以程序員/建模者不必這樣做)到更小的三角形中。

不幸的是,這是......波濤洶涌......?仿射變換不會是不夠精確,或者會是這樣,但它們將不適合於其它三角形...的圖像來演示:

(死圖像)

正如你可以在看紅色部分,它們非常波濤洶涌,在前中間欄中最顯着。

所以 - 我做錯了什麼?這是怎麼做到的,桑迪,三維,Alternativa從一些角度舉幾個例子?

編輯:我使用轉型爲三角形的代碼看起來是這樣的:

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(); 
} 

編輯:這裏是變壓器的小型演示:

CLICK HERE(無效鏈接)

(箭頭控制藍點,1-3改變選定的句柄 - 嘗試numpad和頂部數字鍵)

+1

你使用drawTriangles這個嗎? – Zevan 2010-11-20 17:44:32

+0

不。我有一個代碼,我正在把btw中的這個帖子正確地將BitmapData轉換爲三角形點,所以我不認爲問題在那裏。我可能會移植到繪製三角形,因爲畢竟,我已經在使用矢量來提高性能。 – 2010-11-20 17:48:42

+1

我想如果你嘗試使用drawTriangles,它會解決你的問題。這裏有一些與drawTriangles和z-sorting相關的帖子http://actionsnippet.com/?s=drawTriangles&searchsubmit=Search – Zevan 2010-11-20 18:28:27

回答

1

我想如果你嘗試使用drawTriangles,它會解決你的問題。這裏有一些帖子與drawTriangles和z-sorting相關link