J2MEのポリゴン塗りつぶし

J2MEのポリゴン塗りつぶし

-AnfyTeam Development Section: J2ME - MIDP - Wireless: OPEN LETTER ABOUT MIDP 1.0 GRAPHICS
--http://www.anfyteam.com/dev/j2me/midpimage.html
--->********************************************************
---> fillPolygon() or at least fillTriangle() supported
--->********************************************************
--->
--->5) Have a Graphics.fillPolygon(), or at least a
--->Graphics.fillTriangle() method added. It's
--->important to optimize the code for triangles plotting.
--->In fact, most of the 3d is plotted via triangles and there
--->are special drawing algorithms to speed-up the special
--->case of polygons with 3 vertexes. This could also
--->permit better 2D vectorial graphics like the "macromedia
--->Flash" technology for html pages.

-KDDI Profile Javadoc: インタフェース ExtensionGraphics
--http://sakura.meijo-u.ac.jp/java/kddi-ezplus/com/kddi/graphics/ExtensionGraphics.html
--->MIDP の javax.microedition.lcdui.Graphics クラスの描画機能を拡張しています。
--->javax.microedition.lcdui.Image クラスの getGraphics() によって取得される Graphics オブジェクトと Canvas クラスの Paint() に渡される Graphics オブジェクトには、 このインタフェースが実装されています。
---com.kddi.graphics.ExtensionGraphics#fillPolygon

-SourceForge.net: JMicroPolygon
--http://sourceforge.net/projects/jmicropolygon/

-J2SEのGraphics#fillPolygon
--->多角形内の領域は、偶奇塗りつぶし規則 (交互規則ともいう) を使って定義されます。
--->public abstract void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
--->x 座標と y 座標の配列で定義される閉じた多角形を塗りつぶします。
--->このメソッドは、nPoint ラインセグメントによって定義される多角形を描きます。この場合、最初の nPoint - 1 ラインセグメントは、1 ? i ? nPoints に対する、(xPoints[i - 1], yPoints[i - 1]) から (xPoints[i], yPoints[i]) までのラインセグメントです。最後の点と最初の点が一致しない場合、それらを接続するラインを描画すれば図は自動的に閉じます。
--->多角形内の領域は、偶奇塗りつぶし規則 (交互規則ともいう) を使って定義されます。

-Sun Microsystems
--http://developers.sun.com/events/techdays/presentations/seattle/WirelessGameDevelopment.pdf
--->Painting polygons pretty darn
--->quickly: Graphics.fillTriangle()
--->
--->public void render(Graphics g) {
--->for (int i=0; i<object_list.size(); i++) {
--->ThreeDObject object = (ThreeDObject)object_list.elementAt(i);
--->object.transfromToScreenCoordinates(camera);
--->for (int j=0; j<object.polygon_list.length; j++) {
--->Polygon poly = object.polygon_list[j];
--->poly.shade(light);
--->g.setColor(poly.color);
--->g.fillTriangle(
--->poly.plist[0].screen_x, poly.plist[0].screen_y,
--->poly.plist[1].screen_x, poly.plist[1].screen_y,
--->poly.plist[2].screen_x, poly.plist[2].screen_y
--->);
--->if (poly.point_list.length == 4) {
--->g.fillTriangle(
--->poly.plist[2].screen_x, poly.plist[2].screen_y,
--->poly.plist[3].screen_x, poly.plist[3].screen_y,
--->poly.plist[0].screen_x, poly.plist[0].screen_y
--->);
--->}
--->}
--->}
--->}