我正在爲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和頂部數字鍵)
你使用drawTriangles這個嗎? – Zevan 2010-11-20 17:44:32
不。我有一個代碼,我正在把btw中的這個帖子正確地將BitmapData轉換爲三角形點,所以我不認爲問題在那裏。我可能會移植到繪製三角形,因爲畢竟,我已經在使用矢量來提高性能。 – 2010-11-20 17:48:42
我想如果你嘗試使用drawTriangles,它會解決你的問題。這裏有一些與drawTriangles和z-sorting相關的帖子http://actionsnippet.com/?s=drawTriangles&searchsubmit=Search – Zevan 2010-11-20 18:28:27