チェンジセット 212

差分発生行の前後
無視リスト:
コミット日時:
2008/01/22 02:02:41 (4 年前)
コミッタ:
rch850
ログメッセージ:

Now Metasequoia supports GreatWhite?.
Older version is remained as Metasequoia_1_7.
Fixed order of vertices in mirrored face.
Fixed axis problem.

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/Metasequoia/src/org/libspark/pv3d/Metasequoia.as

    r100 r212  
    11/* 
    2  * Copyright 2006-2007 (c) rch850 
     2 * Copyright 2007-2008 (c) rch850 
    33 * 
    44 * Permission is hereby granted, free of charge, to any person 
     
    3131        import flash.utils.ByteArray; 
    3232        import flash.utils.Dictionary; 
    33         import org.papervision3d.core.geom.Face3D; 
    34         import org.papervision3d.core.geom.Mesh3D; 
    35         import org.papervision3d.core.geom.Vertex3D; 
    36         import org.papervision3d.core.Matrix3D; 
    37         import org.papervision3d.core.NumberUV; 
     33        import org.papervision3d.core.geom.TriangleMesh3D; 
     34        import org.papervision3d.core.geom.renderables.Triangle3D; 
     35        import org.papervision3d.core.geom.renderables.Vertex3D; 
     36        import org.papervision3d.core.math.Matrix3D; 
     37        import org.papervision3d.core.math.NumberUV; 
    3838        import org.papervision3d.core.proto.GeometryObject3D; 
    3939        import org.papervision3d.core.proto.MaterialObject3D; 
     
    4141        import org.papervision3d.materials.BitmapFileMaterial; 
    4242        import org.papervision3d.materials.ColorMaterial; 
    43         import org.papervision3d.materials.MaterialsList; 
     43        import org.papervision3d.materials.utils.MaterialsList; 
    4444        import org.papervision3d.objects.DisplayObject3D; 
    4545         
     
    5151        * mqo.load("hoge.mqo"); 
    5252        */ 
    53         public class Metasequoia extends Mesh3D { 
     53        public class Metasequoia extends TriangleMesh3D { 
    5454                /** 
    5555                * コンストラクタ 
     
    108108                private function buildMetasequoia(plainText:String):void { 
    109109                        var lines:Array = plainText.split("\r\n"); 
    110                         trace("num lines = " + lines.length); 
     110                        //trace("num lines = " + lines.length); 
    111111                        var l:int = 0; 
    112112                         
     
    194194                                                var b:int = parseFloat(color[2]) * 255; 
    195195                                                var a:Number = parseFloat(color[3]) * 100; 
    196                                                 trace("rgb = " + r + "," + g + "," + b); 
     196                                                //trace("rgb = " + r + "," + g + "," + b); 
    197197                                                material = new ColorMaterial((r << 16) | (g << 8) | b); 
    198198                                        } else { 
     
    287287                                var x:Number = parseFloat(coords[0]) * _scale; 
    288288                                var y:Number = parseFloat(coords[1]) * _scale; 
    289                                 var z:Number = parseFloat(coords[2]) * _scale; 
     289                                var z:Number = -parseFloat(coords[2]) * _scale; 
    290290                                vertices.push(new Vertex3D(x, y, z)); 
    291291                        } 
     
    329329                        var uvC:NumberUV; 
    330330                        var uvD:NumberUV; 
    331                         var face:Face3D; 
     331                        var face:Triangle3D; 
    332332                         
    333333                        if (v.length == 3) { 
    334                                 a = vertices[parseInt(v[0]) + vertexOffset]; 
     334                                c = vertices[parseInt(v[0]) + vertexOffset]; 
    335335                                b = vertices[parseInt(v[1]) + vertexOffset]; 
    336                                 c = vertices[parseInt(v[2]) + vertexOffset]; 
     336                                a = vertices[parseInt(v[2]) + vertexOffset]; 
    337337                                 
    338338                                if (mstr != null) { 
     
    341341                                 
    342342                                if (uv.length != 0) { 
    343                                         uvA = new NumberUV(parseFloat(uv[0]), 1 - parseFloat(uv[1])); 
     343                                        uvC = new NumberUV(parseFloat(uv[0]), 1 - parseFloat(uv[1])); 
    344344                                        uvB = new NumberUV(parseFloat(uv[2]), 1 - parseFloat(uv[3])); 
    345                                         uvC = new NumberUV(parseFloat(uv[4]), 1 - parseFloat(uv[5])); 
    346                                         face = new Face3D([a, b, c], material, [uvA, uvB, uvC]); 
     345                                        uvA = new NumberUV(parseFloat(uv[4]), 1 - parseFloat(uv[5])); 
     346                                        face = new Triangle3D(this, [a, b, c], material, [uvA, uvB, uvC]); 
    347347                                } else { 
    348                                         face = new Face3D([a, b, c], material, 
     348                                        face = new Triangle3D(this, [a, b, c], material, 
    349349                                                [new NumberUV(0, 0), new NumberUV(1, 0), new NumberUV(0, 1)]); 
    350350                                } 
     
    360360                                        vertices.push(b); 
    361361                                        vertices.push(c); 
    362                                         face = new Face3D([a, b, c], material, face.uv); 
     362                                        face = new Triangle3D(this, [c, b, a], material, face.uv.reverse()); 
    363363                                        faces.push(face); 
    364364                                } 
    365365                        } else if (v.length == 4) { 
    366                                 a = vertices[parseInt(v[0]) + vertexOffset]; 
    367                                 b = vertices[parseInt(v[1]) + vertexOffset]; 
    368                                 c = vertices[parseInt(v[2]) + vertexOffset]; 
    369                                 d = vertices[parseInt(v[3]) + vertexOffset]; 
     366                                d = vertices[parseInt(v[0]) + vertexOffset]; 
     367                                c = vertices[parseInt(v[1]) + vertexOffset]; 
     368                                b = vertices[parseInt(v[2]) + vertexOffset]; 
     369                                a = vertices[parseInt(v[3]) + vertexOffset]; 
    370370                                 
    371371                                if (mstr != null) { 
     
    374374                                 
    375375                                if (uv.length != 0) { 
    376                                         uvA = new NumberUV(parseFloat(uv[0]), 1 - parseFloat(uv[1])); 
    377                                         uvB = new NumberUV(parseFloat(uv[2]), 1 - parseFloat(uv[3])); 
    378                                         uvC = new NumberUV(parseFloat(uv[4]), 1 - parseFloat(uv[5])); 
    379                                         uvD = new NumberUV(parseFloat(uv[6]), 1 - parseFloat(uv[7])); 
     376                                        uvD = new NumberUV(parseFloat(uv[0]), 1 - parseFloat(uv[1])); 
     377                                        uvC = new NumberUV(parseFloat(uv[2]), 1 - parseFloat(uv[3])); 
     378                                        uvB = new NumberUV(parseFloat(uv[4]), 1 - parseFloat(uv[5])); 
     379                                        uvA = new NumberUV(parseFloat(uv[6]), 1 - parseFloat(uv[7])); 
    380380                                } else { 
    381                                         uvA = new NumberUV(0, 0); 
    382                                         uvB = new NumberUV(1, 0); 
    383                                         uvC = new NumberUV(0, 1); 
    384                                         uvD = new NumberUV(1, 1); 
    385                                 } 
    386                                 face = new Face3D([a, b, c], material, [uvA, uvB, uvC]); 
     381                                        uvD = new NumberUV(0, 0); 
     382                                        uvC = new NumberUV(1, 0); 
     383                                        uvB = new NumberUV(0, 1); 
     384                                        uvA = new NumberUV(1, 1); 
     385                                } 
     386                                face = new Triangle3D(this, [a, b, c], material, [uvA, uvB, uvC]); 
    387387                                faces.push(face); 
    388                                 face = new Face3D([c, d, a], material, [uvC, uvD, uvA]); 
     388                                face = new Triangle3D(this, [c, d, a], material, [uvC, uvD, uvA]); 
    389389                                faces.push(face); 
    390390                                 
     
    399399                                        vertices.push(c); 
    400400                                        vertices.push(d); 
    401                                         face = new Face3D([a, b, c], material, [uvA, uvB, uvC]); 
     401                                        face = new Triangle3D(this, [c, b, a], material, [uvC, uvB, uvA]); 
    402402                                        faces.push(face); 
    403                                         face = new Face3D([c, d, a], material, [uvC, uvD, uvA]); 
     403                                        face = new Triangle3D(this, [a, d, c], material, [uvA, uvD, uvC]); 
    404404                                        faces.push(face); 
    405405                                }