大差はない

by Nowloading_
http://wonderfl.net/c/vXzGの変数名をわかりやすく(わかりにくく?)変えて、各Planeがカメラ目線するようにして、各軸に半透明なPlaneを置いてみた。
♥0 | Line 123 | Modified 2011-09-04 17:55:22 | MIT License
play

ActionScript3 source code

/**
 * Copyright Nowloading_ ( http://wonderfl.net/user/Nowloading_ )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/Uzrm
 */

package {
    import flash.display.DisplayObject;
    import org.papervision3d.materials.*;
    import org.papervision3d.materials.utils.*;
    import org.papervision3d.materials.special.*;
    import org.papervision3d.objects.primitives.*;
    import org.papervision3d.objects.*;
    import org.papervision3d.view.*;
    import flash.events.*;
    [SWF(backgroundColor = 0x000000)]
    public class mf extends BasicView {
        //
        //
        //cube格納用オブジェクト
        private var field:DisplayObject3D;
        //表面用と下部用のcube
        private var ucube:Cube;
        private var dcube:Cube;
        //cubeの縦横幅とcube間の長さ;
        private var wide:int = 50;
        private var dx:int = 5;
        //cubeの色指定配列:color[x軸][z軸]
        //数値は0=green,1=brown, 2=blueに対応
        //色の指定(uColor=上部の色;dColor = 下部の色)
        private var uColor:Array = [[0,0,0,1,1],
                                    [0,0,1,2,2],
                                    [0,1,2,2,2],
                                    [0,1,1,2,2],
                                    [0,0,1,2,2],
                                   ];
        private var dColor:Array = [[1,1,1,1,1],
                                    [1,1,1,1,2],
                                    [1,1,1,2,2],
                                    [1,1,1,1,2],
                                    [1,1,1,2,2],
                                   ];
        //各cubeの高さ
        private var hCube:Array = [[6,4,2,2,3],
                                   [4,2,1,0,0],
                                   [2,1,0,0,0],
                                   [3,2,2,0,0],
                                   [4,3,3,0,0],
                                  ];
        //上下cubeの高さ管理変数
        private var high:int =20;
        //cube用colormaterial;実際に使うのはcubeMat配列のみ
        private var gr:ColorMaterial = new ColorMaterial(0x60ff60);
        private var br:ColorMaterial = new ColorMaterial(0xd0a080);
        private var bl:ColorMaterial = new ColorMaterial(0xd0ddff);
        private var g:MaterialsList = new MaterialsList( { all:gr } );
        private var l:MaterialsList = new MaterialsList( { all:br } );
        private var b:MaterialsList = new MaterialsList( { all:bl } );
        private var cubeMat:Array = [g,l,b];
        //
        //
        //plane格納用オブジェクト
        private var chara:DisplayObject3D;
        //charaの管理配列と通し番号用変数
        private var c:Array = new Array();
        private var charaNo:int = 0;
        private var plane:Plane;
        //Plane用material;実際に使うのはplaneMat配列のみ
        private var aka:WireframeMaterial = new WireframeMaterial(0xcc0000,3);
        private var ao:WireframeMaterial = new WireframeMaterial(0x0000cc,3);
        private var midori:WireframeMaterial = new WireframeMaterial(0x00cc00,3);
        private var planeMat:Array = [aka,ao,midori];
        //planeの配置;1=akaPlane,2=aoPlane,3=midoriPlane;
        private var haiti:Array = [[1,0,0,0,2],
                                   [0,1,0,0,0],
                                   [1,0,0,0,0],
                                   [0,0,0,0,3],
                                   [2,2,0,0,0],
                                  ];
        //
        //
        //radiun
        private var rad:int = 0;
        //
        //
        //土台baseと軸表示plane
        private var baseColor:ColorMaterial = new ColorMaterial(0x8a5040);
        private var baseMat:MaterialsList = new MaterialsList({all:baseColor});
        private var base:Cube;
        private var planeColor:ColorMaterial = new ColorMaterial(0xdddddd,0.2);
        private var planeX:Plane;
        private var planeY:Plane;
        private var planeZ:Plane;
        //constructer
        public function mf() {
            init();
        }
        private function init():void{
            /*for(var m:int = 0;m<planeMat.length; m++){
                planeMat[m].doubleSided = true;
            }*/
            field = new DisplayObject3D;
            chara = new DisplayObject3D;
            scene.addChild(field);
            scene.addChild(chara);
            for(var i:int = 0; i<uColor.length; i++){
                for(var j:int = 0; j<uColor[0].length; j++){
                    //Fieldの作成
                    ucube = new Cube(cubeMat[uColor[i][j]],wide,wide,high/2);
                    dcube = new Cube(cubeMat[dColor[i][j]],wide,wide,(hCube[i][j]+1)*high);
                    ucube.x = dcube.x = -((wide+dx)*Math.floor(uColor.length/2)) + ((wide+dx)*i);
                    ucube.z = dcube.z = -((wide+dx)*Math.floor(uColor[0].length/2)) + ((wide+dx)*j);
                    dcube.y = ((hCube[i][j]+1)*high)/2;
                    ucube.y = dcube.y*2 + high/4;
                    field.addChild(ucube,"UC_x"+i+"z"+j);
                    field.addChild(dcube,"DC_x"+i+"z"+j);
                    //charaの追加
                    //ここまだ代数にしてない
                    if(haiti[i][j] != 0){
                        plane = new Plane(planeMat[haiti[i][j]-1],40,60,4,8);
                        plane.x = -((wide+dx)*Math.floor(uColor.length/2)) + ((wide+dx)*i);
                        plane.z = -((wide+dx)*Math.floor(uColor[0].length/2)) + ((wide+dx)*j);
                        plane.y = ucube.y + 55;
                        c[charaNo] = plane;
                        chara.addChild(c[charaNo], "CHARA_"+charaNo);
                        charaNo +=1;
                    }
                }
            }
            //baseと軸planeの追加
            base = new Cube(baseMat,(wide+dx)*uColor.length-dx,(wide+dx)*uColor[0].length-dx,10);
            base.y = -high/2;
            scene.addChild(base);
            planeColor.doubleSided = true;
            planeX = new Plane(planeColor,500,500);
            planeX.rotationY = 90;
            scene.addChild(planeX);
            planeY = new Plane(planeColor,500,500);
            planeY.rotationX = 90;
            scene.addChild(planeY);
            planeZ = new Plane(planeColor,500,500);
            scene.addChild(planeZ);
            
            //camera.x = 400;   
            camera.y = 250;
            camera.z = -400;
            startRendering();
            addEventListener(Event.ENTER_FRAME,oEF);
        }
        private function oEF(e:Event):void{
            camera.x = 400*Math.sin(rad*Math.PI/180);
            camera.z = -400*Math.cos(rad*Math.PI/180);
            for(var n:int=0;n<charaNo; n++){
                c[n].rotationY = -rad;
            }

            rad += 2;
            if ( rad>=360){
                rad =0;
            }
        }
    }
}

Forked