2010年7月27日 星期二

換算經緯轉成 X,Y,Z 將物件放置於球體的表面

換算經緯轉成 X,Y,Z  將物件放置於球體的表面





package {

import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.filters.*;

import away3d.core.base.*;
import away3d.core.math.*;
import away3d.containers.*;
import away3d.primitives.*;
import away3d.cameras.*;
import away3d.core.render.*;
import away3d.materials.*;
import away3d.core.utils.*;
import away3d.sprites.*;
import away3d.loaders.*;
import away3d.events.*;




public class SphereSatellite2 extends Sprite {

private static const ORBITAL_RADIUS:Number=150;
private static const CAMERA_ORBIT:Number=600;

private var cameraPitch:Number=60;
private var cameraYaw:Number=-60;

private var scene:Scene3D;
private var camera:Camera3D;
private var view:View3D;
private var group:ObjectContainer3D;

private var sphere:Sphere;
private var sphereA:Sphere;
private var sprite:Sprite3D;
private var swf:Swf;

private var spriteMaterial:BitmapMaterial;
private var materialBall:MovieMaterial;


[Embed(source="img/sirius.jpg")]
private var Star:Class;

[Embed(source="img/earthmask.png")] private var EarthMaskImage:Class;
     private var earthMask:Bitmap = new EarthMaskImage();

public function SphereSatellite2() {

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP;

init3D();
initMaterials();
createscene();
addEventListener(Event.ENTER_FRAME,loop);
stage.addEventListener(MouseEvent.MOUSE_WHEEL,mouseWheel);

}

private function init3D():void {
scene=new Scene3D  ;
camera=new Camera3D({zoom:25,focus:30});
setCameraPosition();
view=new View3D({scene:scene,camera:camera});
view.x=stage.stageWidth/2;
view.y=stage.stageHeight/2;
addChild(view);
}

function createscene():void {

//建立一個 View 如果一個視窗
//addChild(view=new View3D({x:400, y:100}));

//camera=new Camera3D({zoom:25,focus:30});

group = new ObjectContainer3D();
scene.addChild(group);

//建立一個球體
//sphere=new Sphere({material:new WireColorMaterial()});
//var wireframeMaterial:WireframeMaterial=new WireframeMaterial({wireColor:0x000000});

var earthMaskMaterial:BitmapMaterial = new BitmapMaterial(Cast.bitmap(earthMask));
sphere=new Sphere({material:earthMaskMaterial,radius:ORBITAL_RADIUS,segmentsW:10,segmentsH:10});
//sphere.smooth =true;
sphere.bothsides =true;
group.addChild(sphere);

var sphereMaterial:WireColorMaterial=new WireColorMaterial(0x5500FF,{wirecolor:0xFF9900});
sphereA=new Sphere({material:sphereMaterial,radius:5,segmentsW:10,segmentsH:10});
sphereA.x = ORBITAL_RADIUS;
//group.addChild(sphereA);

/*
sprite=new Sprite3D(null,5,5);
sprite.x=-ORBITAL_RADIUS;
sprite.scaling=0.005*100;
sprite.material=spriteMaterial;
//group.addSprite(sprite);


var swf = new Swf();
swf.libraryClips = ["fish"];
var fish = swf.parseGeometry(loaderInfo.bytes) as ObjectContainer3D;
fish.x = ORBITAL_RADIUS;
fish.rotationY = 90;
*/


var fish = new kk();
materialBall=new MovieMaterial(fish);
materialBall.smooth = true;



var ball;

for(var j=0; j<6; j++){

for(var i=0; i<36; i++){
ball = createPoint(ORBITAL_RADIUS+2, 10, j*10, i*10);
ball.addEventListener(MouseEvent3D.MOUSE_DOWN  , clickBall);
group.addChild(ball);
}

}



//將球體加入場景
scene.addChild(group);
}


function createPoint(radius, size, angleX, angleY){
var plane = new Plane({ width:size, height:size });
plane.material = materialBall;
//plane.x = radius;


plane.y = sinRadiusAngle2H(radius, angleX);

//以高度為基準,產生第二個半徑,做為 X,Y 的計算參考
var radius2 = cosRadiusAngle2W(radius, angleX);

//以第二半徑計算水平的座標
plane.z = sinRadiusAngle2H(radius2, angleY);
plane.x = cosRadiusAngle2W(radius2, angleY);


//修正平面對向以球心
plane.rotationZ = -90+angleX;
plane.rotationX = -angleY;


plane.bothsides = true;
return plane;
}

//斜邊,仰角 求水平距離
function cosRadiusAngle2W(radius:Number,angle:Number ){
 var w = radius*Math.cos(angle*Math.PI/180);
 return w;
}

//求高度  水平距離和仰角求高
function tanAW2H(angle, w ):Number{
var h=w*Math.tan(angle*Math.PI/180);
return h
}

//求高度  水平距離和仰角求高
function sinRadiusAngle2H(radius:Number, angle:Number  ):Number{
var h=radius*Math.sin(angle*Math.PI/180);
return h
}



function initMaterials():void {

var earthMaskMaterial:BitmapMaterial = new BitmapMaterial(Cast.bitmap(earthMask));
//earthMaskMaterial.showNormals = true;
earthMaskMaterial.smooth = true;

var star:BitmapData=Cast.bitmap(Star);
var transstar:BitmapData=new BitmapData(star.width,star.height,true);
transstar.applyFilter(star, star.rect, new Point(0,0), new ColorMatrixFilter([0, 0, 0, 0, 245, 0, 0, 0, 0, 245, 0, 0, 0, 0, 255, 0.3, 0.3, 0.3, 0, 0]));
spriteMaterial=new BitmapMaterial(transstar);


}

function clickBall(e:Event):void {
trace("clickBall");
}
function loop(event:Event):void {
var offset = 0.1;

view.camera.moveTo(sphere.x,sphere.y,sphere.z);

view.camera.rotationY=mouseX/2;
//view.camera.rotationX=-(mouseY/2);
view.camera.moveBackward(500);

group.rotationY+=  offset;

//trace(mouseX, mouseY);

view.render();
}

private function setCameraPosition():void {
camera.y=CAMERA_ORBIT*Math.cos(cameraPitch*Math.PI/180);
camera.x=CAMERA_ORBIT*Math.sin(cameraPitch*Math.PI/180)*Math.cos(cameraYaw*Math.PI/180);
camera.z=CAMERA_ORBIT*Math.sin(cameraPitch*Math.PI/180)*Math.sin(cameraYaw*Math.PI/180);
// keep the camera looking at the origin
camera.lookAt(new Number3D(0, 0, 0));
}

private function mouseWheel(e:MouseEvent):void {
//trace("mouseWheel", e.delta);
camera.fov-=e.delta;
setCameraPosition();

}

}// end class
}

以flash 實做三角函數 觀查角度與徑度的變化

以flash 實做三角函數 觀查角度與徑度的變化





\sin x = \frac {a}{c}
\cos x = \frac {b}{c}
\tan x = \frac {a}{b}

{rad}=\pi{\frac{deg}{180^{\circ}}}
常用的弧度轉換公式:
2\pi \leftrightarrow 360^{\circ}
\pi \leftrightarrow 180^{\circ}
\frac{\pi}{2} \leftrightarrow 90^{\circ}
\frac{\pi}{3} \leftrightarrow 60^{\circ}
\frac{\pi}{4} \leftrightarrow 45^{\circ}
\frac{\pi}{6} \leftrightarrow 30^{\circ}

2010年7月26日 星期一

HTC Desire 的雙向錄音功能的點殘缺

用一陣子,才想到要錄音的功能,所以在Market 找了兩三套來試,都有想同的問題,就是另一方通話的聲音太小了,在想不會那麼巧吧!,所以在網站爬了一下。原來問題在 Android 不知道Google 什麼會改善。

http://mortlemania.wordpress.com/2010/06/10/call-recording-crippled-on-android-fix-this-now-google/

http://code.google.com/p/android/issues/detail?id=2117#c180

Fly Mosquito 模擬像蚊子浮動的效果

Fly Mosquito 模擬像蚊子浮動的效果




//主程式


package {

import flash.display.*;
import flash.media.*;
import flash.events.*;

import webco.*;


public class MainTest extends Sprite {

public function MainTest() {

var num=5;
var msq;
var aMS= new Array();
for (var i=0; i<=num; i++) {

msq = new Mosquito();
msq.x=randomNumber(0,stage.stageWidth-50);
msq.y=randomNumber(0,stage.stageHeight-50);
//trace(msq);
addChild(msq);
msq.addEventListener(MouseEvent.CLICK ,onClick);

aMS.push(new MosquitoSimulator(msq));
trace(i);
}

var sound:Sound = new MosquitoSound();
sound.play();

}


function onClick(e:Event) {
var sound:Sound = new MosquitoSound();
sound.play();
}


function randomNumber(low:Number=NaN, high:Number=NaN):Number {
var low:Number=low;
var high:Number=high;

if (isNaN(low)) {
throw new Error("low must be defined");
}
if (isNaN(high)) {
throw new Error("high must be defined");
}

return Math.round(Math.random() * (high - low)) + low;
}

}

}




//模擬程式

package webco{

import flash.display.*;
import flash.events.*;
import flash.geom.Point;
import flash.media.*;


import caurina.transitions.Tweener;

public class MosquitoSimulator {

var initX;
var initY;
var dX=50;
var dY=50;
var simular:*;

public function MosquitoSimulator(obj:Sprite) {

this.simular=obj;

initX=simular.x;
initY=simular.y;

this.simular.addEventListener(MouseEvent.MOUSE_OVER,onOver);
this.simular.addEventListener(MouseEvent.MOUSE_OUT,onOut);

setFloat();

}

function onOver(e:Event) {
   var clickPoint:Point = new Point(simular.mouseX, simular.mouseY);
clickPoint = simular.localToGlobal(clickPoint)
simular.buttonMode = true;

var nx =  clickPoint.x-simular.width/2;
var ny =  clickPoint.y-simular.height/2;
Tweener.removeTweens(this.simular);
Tweener.addTween(this.simular, {x:nx, y:ny, delay:0, time:0.5, transition:"easeInOutQuart"} );

}

function onOut(e:Event) {
setFloat();
}

function setFloat() {
var nx=randomNumber(initX,initX-dX);
var ny=randomNumber(initY,initY-dY);
var delay =randomNumber(0,2);
//trace("setFloat",nx, ny);
Tweener.addTween(this.simular, {x:nx, y:ny, delay:delay, time:2, transition:"easeInOutQuart",onComplete:setFloatHandle} );

}

function setFloatHandle() {
//var nx=randomNumber(initX,);
//var ny=randomNumber(3,7);
//trace("setFloatHandle",initX, initY);
Tweener.addTween(this.simular, {x:initX, y:initY, time:1, delay:0, transition:"easeInOutQuart", onComplete:setFloat} );
}

function randomNumber(low:Number=NaN, high:Number=NaN):Number {
var low:Number=low;
var high:Number=high;

if (isNaN(low)) {
throw new Error("low must be defined");
}
if (isNaN(high)) {
throw new Error("high must be defined");
}

//return Math.round(Math.random() * (high - low)) + low;

return (Math.random() * (high - low)) + low;
}


}// end class


}



下載

http://tmp.webco.tw/flash/mosquito/mosquito.swf

2010年7月22日 星期四

AS3 Singleton Pattern

為了確保類別的實體化不會有第二次,不論系統內何處實體化都是相同的物件,可以用來當做全域變數的實體物件




SingletonTest.as


package
{
import flash.display.Sprite;
public class SingletonTest extends Sprite
{
public function SingletonTest()
{
var initialSingleton:Singleton = Singleton.getInstance();
var subsequentSingleton:Singleton = Singleton.getInstance();
}
}
}



Singleton.as

package
{
public class Singleton
{
private static var _instance:Singleton;
public function Singleton(pvt:PrivateClass) {
}
public static function getInstance():Singleton
{
if(Singleton._instance == null)
{
Singleton._instance=new Singleton(new PrivateClass());
trace("Singleton instantiated");
}
else
{
trace("Sorry--already have a Singleton instantiated")
}
return Singleton._instance;
}
}
}

class PrivateClass
{
public function PrivateClass() {
trace("Private class is up");
}
}

2010年7月20日 星期二

建立文字盒 TextField




import flash.text.*;



var label1:TextField ;



label1 = createCustomTextField(100, 500, 400, 20);
label1.text = "Webco.TW";





private function createCustomTextField(x:Number, y:Number, width:Number, height:Number):TextField {


var result:TextField = new TextField();
        result.x = x; result.y = y;
        result.width = width; result.height = height;
        addChild(result);

var my_fmt:TextFormat = new TextFormat();
my_fmt.color = 0xFFFFFF;
result.defaultTextFormat = my_fmt;
  
        return result;
}

2010年7月16日 星期五

阿建的筆記: Away3D 雙面貼圖

阿建的筆記: Away3D 雙面貼圖: "Away3D 雙面貼圖 http://tmp.webco.tw/flash/sphereMapping/sphereMap.swf 產生PNG格式的透明圖片 做為貼圖 AS3 的程式碼 package { import f..."

阿建的筆記: Flash 載入 3D Object

阿建的筆記: Flash 載入 3D Object: "Flash 載入 3D  Object package { import away3d.cameras.Camera3D; import away3d.containers.*; import away3d.core.math.Nu..."

NOKY英語單字學習網站使用方法




  1. 請在進入本網頁www.noky.tw後,先註冊,以利個人學習記錄;選擇國小、國中、高中課程!並打開喇叭或戴上耳機。
  2. 建議從國小課程之各階段開始,如此可復習並增加耳語聽力習慣!
  3. 點選進入國小課程,並從初級選項開始!
  4. 進入初級選項後,點選藍色顯示項目「馬上練習」。每日選擇一項即可,把該項之三十個單字(每一項目量皆同)嚐試過後即可休息,很輕鬆吧^^,如此日日練習即可見功效。
  5. 練習時,請跟著外籍女士所錄製的純正語音發音,念出來之後,再選擇該單字的正確意思。如此,可加強印象並校正口語腔調。養成習慣,出國不亂!^^






PHP 設定執行的時

如果要限定 php 可執行的時間最為長為為 30秒

set_time_limit(30);





如果有執行很長的時間可以設為 0

set_time_limit(0);


2010年7月15日 星期四

輕易的做出類似 Google Street 的功能


Away3D  SkyBox 也可以輕易的做出類似 Google Street 的功能






首先在找一張圖片skyBox 的貼圖一般的排版方式如下,在Away3D 是不能使用的


用PhotoShop 排版成Away3D SkyBox 所接受的格式






另一種貼圖的製作方式

  1. 準備六張各個角度的圖片

  2. 下載  NVIDIA Plug-ins for Adobe Photoshop
    http://developer.nvidia.com/object/photoshop_dds_plugins.html

  3. PhotoShop 載入檔案
    執行  file -> script -> SkyCube textures

  4. 再修改成 Away3D 所讀取的版面格式

2010年7月14日 星期三

Away3D 雙面貼圖

Away3D 雙面貼圖



http://tmp.webco.tw/flash/sphereMapping/sphereMap.swf


產生PNG格式的透明圖片 做為貼圖





AS3 的程式碼

圖片產生鏡面反射效果

圖片產生鏡面反射效果 Reflaction



package {

import flash.display.*;
import com.sebastiaanholtrop.reflection.*;


public class ReflectTest extends Sprite {

[Embed(source="img/nightpark.jpg")] private var parkImage:Class;
private var image2 =  new parkImage();
  private var imageReflection:Reflect;
var imgSprite  = new Sprite();

public function ReflectTest() {

image2.scaleX = .1;
image2.scaleY = .1;
imgSprite.addChild(image2);
addChild(imgSprite);


imageReflection = new Reflect(this.imgSprite as Sprite, 0.4, 100, true, Reflect.BOTTOM, 0);
}
}
}




下載   http://tmp.webco.tw/flash/reflection/

2010年7月9日 星期五

Flash 也可以製作色相表

每一個顏色都是由三個顏色(RGB)所構成 而每一個顏色使用  8bit  紀錄 所以一個像素使用了 32 bit 來紀錄資料

顏色由左至右 為 Red, Green, blue  分為由三個變數來紀錄 使用  位元位移運算子 移到該顏色的位至

  1. nRed   = nR << 16;   

  2. nGreen = nG << 8;

  3. nBlue  = nB;



  1. nR = Math.cos(nRadians)                   * 127 + 128 << 16;

  2. nG = Math.cos(nRadians + 2 * Math.PI / 3) * 127 + 128 << 8;

  3. nB = Math.cos(nRadians + 4 * Math.PI / 3) * 127 + 128

  4. nColor  = nR | nG | nB;

    再使用 邏輯運算子  or  將三個顏色合為一個變數 

    接下來再用 nRadians  來控顏色的變化













資料來源
http://www.boostworthy.com/blog/?p=200

畢達哥拉斯定理 詳解

http://en.wikipedia.org/wiki/Pythagorean_theorem


Photo Shop 把多張照片連接成一張寬景圖


羅東運動公園










File->Automate->Photomerge    assign files  and  select auto








  • 寬景照:指多張照片接出來的超廣角照

  • 環景照:跟寬景照相同,可是要能夠環繞一圈,且0° 要能跟 360° 完整接的上

  • 全景照:基於環景照的 0° - 360° 再包含天、地 180°




  • Math.PI/180

    在數學的計算上常會看到   Math.PI/180  將徑度換算成角度

    由 PI 的定義得知 PI 代表圓周與直徑之比例的數學常數    

    PI= 圓週 / 直行  = 3.141592653589793


    但是什麼  弧度 =  1*PI = 180o  而不是  360呢?


    弧度(radians) = 2 * PI  * r(半徑)

    弧度(radians) =  PI  * R(直徑)

    2010年7月8日 星期四

    在Blogger 上加入Flash

    這麼多人用的Blog 竟然沒有embded Flash 的工能,因為常常要放Flash 只好自已準備一下,以後要用就貼上去就可以了


    <object data="FLASH位置" type="application/x-shockwave-flash" width="425" height="350">
    <param name="movie" value="FLASH位置"/>
    <param name="wmode" value="transparent"/>
    </object>

    Away3D 第一次 Say Hello





    下載 HelloWorld.as
    package {
     
     //HelloWorld.as  by Pete(webco.tw)
     
     
     import flash.display.*;
     import flash.events.*;
     import away3d.core.base.*;
     import away3d.core.math.*;
     import away3d.containers.*;
     import away3d.primitives.*;
     import away3d.cameras.*;
     import away3d.core.render.*;
     import away3d.materials.*;
     import away3d.core.utils.*;
     
     
     public class HelloWorld extends Sprite {
    
      var view:View3D;
      var sphereA:Sphere;
      
      function HelloWorld() {
       createscene();
       addEventListener(Event.ENTER_FRAME,loop);
      }
      
      function createscene():void {
       
       //建立一個 View 如果一個視窗
       addChild(view=new View3D({x:300, y:200}));
       
       //建立一個球體
       sphereA=new Sphere({material:new WireColorMaterial()});
       
       //將球體加入場景
       view.scene.addChild(sphereA);
      }
      
      //算圖  會依目前flash 的影格播放速度彩現(Render) 場景的影像
      function loop(event:Event):void {
       view.camera.moveTo(sphereA.x,sphereA.y,sphereA.z);
       view.camera.rotationY=mouseX/2;
       view.camera.rotationX=mouseY/2;
       view.camera.moveBackward(500);
       sphereA.rotationY+=1;
       view.render();
      }
     }
    }
    

    攝影鏡頭改鏡、修理、調整等等 DIY





    攝影鏡頭改鏡、修理、調整等等 DIY 有很多詳細的資料。








    http://mybigeye.myweb.hinet.net/

    Away3D - papervision3d 外另一套支援 Flash 3D 的軟體

    Away3D 是開放源碼的3D API  讓 Flash 可以呈現 3D 的效果,專案的發展從2007-07 到問前目前 2012-04-25 最新的版本為 Flash CS3  2.50 ,  CS4 3.50  而且者有完整的範例,和線上教學,資料很完整。


    3D 軟體會用到功能這個API 幾乎都可以做到, 例如:  基本模形的建立,攝影機,貼圖,打燈,霧化濾鏡,匯入模型

    線上教學
    http://away3d.com/tutorials

    參考手冊 

    下載



    3D 場景可以移動鍵盤前後左右移動,滑鼠移動可以改變視角,好像第一人稱的3D 遊戲,是不是有點像,DOOM 毀滅戰士或是德軍總部

    hacienda_01


    這個貼圖的特效,真是用 Away3D 做出來的嗎?

    away3d-terminator




    文字特效

    globe1
    Away3D 一樣有貝茲曲線 而且也可以指定為動畫的軌跡

    interactive1


    可以將 flash 的   MovieClip 轉為3D 的動畫

    fish1



    Away3D  也可以發展成室內設計工具 註冊後就可以開始做設計了,完成後還可以輸出 DWG   也就是AutoCAD 的檔案格式
    Away3D Autodesk Project Dragonfly



    SkyBox 是不是和 Google 的街景(street View )很像

    Away3D Finn Viewer


    反光材質的貼圖



    燈光效果
    room_demo
    看得Away3D 也有 Bump 貼圖

    Normalmaps



    Awaybuilder   專為Away3D 開發的工具,可以為型處理貼圖
    awaybuilder_maya

    flash



    球型的貼圖



    水中的效果












    奧迪汽車廣告




    sierpinski  三角  好美喔!






    2010年7月6日 星期二

    Flash 載入 3D Object

    Flash 載入 3D  Object















    package {
    import away3d.cameras.Camera3D;
    import away3d.containers.*;
    import away3d.core.math.Number3D;
    import away3d.core.utils.Cast;
    import away3d.core.base.*;
    import away3d.materials.*;
    import away3d.primitives.*;
    import away3d.loaders.*;
    import away3d.sprites.*;

    import away3d.core.base.Object3D;
    import away3d.events.*;

    import caurina.transitions.Tweener;


    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.*;
    import flash.geom.*;
    import flash.filters.*;
    import flash.net.*;

    public class loadObj extends Sprite {


    private static const ORBITAL_RADIUS:Number=150;
    private static const CAMERA_ORBIT:Number=600;


    private var scene:Scene3D;
    private var camera:Camera3D;
    private var view:View3D;

    private var group:ObjectContainer3D;
    private var cube:Cube;


    private var doRotation:Boolean=false;
    private var lastMouseX:int;
    private var lastMouseY:int;
    private var cameraPitch:Number=60;
    private var cameraYaw:Number=-60;

    private var loader:Loader3D ;
    private var importObject;  //loaded object
    private var spriteMaterial:BitmapMaterial;
    private var spriteMesh:Mesh;
    private var spriteObjects:Array = new Array();
    private var sprite:Sprite3D;




    [Embed(source="images/sirius.jpg")]
    private var Star:Class;
    //private var star:Bitmap = new star();

    public function loadObj() {

    // set up the stage
    stage.align=StageAlign.TOP_LEFT;
    stage.scaleMode=StageScaleMode.NO_SCALE;



    var xmlloader:URLLoader;

    xmlloader = new URLLoader();
    xmlloader.addEventListener(Event.COMPLETE, xmlLoaded);
    var re:URLRequest = new URLRequest("config.xml");
    xmlloader.load(re);





    }


    function xmlLoaded(e:Event):void {
    //trace('xmlLoaded!', e.target);
    var xml = new XML(e.target.data);

    var objName = xml.elements('object3D')[0].attribute('name');

    trace(objName);

    init3D();
    initMaterials()
    createScene(objName);
    addListen();
    }

    private function init3D():void {
    scene=new Scene3D  ;
    camera=new Camera3D({zoom:25,focus:30});
    setCameraPosition();
    view=new View3D({scene:scene,camera:camera});
    view.x=stage.stageWidth/2;
    view.y=stage.stageHeight/2;
    addChild(view);
    }

    function initMaterials():void {
    var star:BitmapData=Cast.bitmap(Star);
    var transstar:BitmapData=new BitmapData(star.width,star.height,true);
    transstar.applyFilter(star, star.rect, new Point(0,0), new ColorMatrixFilter([0, 0, 0, 0, 245, 0, 0, 0, 0, 245, 0, 0, 0, 0, 255, 0.3, 0.3, 0.3, 0, 0]));
    spriteMaterial=new BitmapMaterial(transstar);
    }

    private function createScene(objName:String):void {

    spriteMesh = new Mesh();
    spriteMesh.material=spriteMaterial;

    //spriteMesh.rotate(new Number3D(1, 0, -1), 90 -Math.atan(1/Math.sqrt(2))/toRadians);
    scene.addChild(spriteMesh);


    loader  = Obj.load(objName,{ name:"imPortObj", scaling:1, y:0, x:0, z:0,rotationX:0, loadersize:100});
    loader.addOnSuccess(onLoaderSuccess);


    }


    private function  onLoaderSuccess(e:Loader3DEvent):void {
    trace("onLoaded", e.loader.handle);
    importObject = e.loader.handle;
    //trace(importObject.type);
    //scene.addChild(importObject);
    generateMeshPoint();
    }

    private function  generateMeshPoint():void {
    trace("generateMeshPoint", importObject);
    var size = 5;

    var vertices =importObject.vertices;
    var v:Vertex;
    var spriteObj;
    var snum;

    for(var i:Number=0;i< vertices.length;i++){

    v = vertices[i];

    sprite=new Sprite3D(null,5,5);
    sprite.x=v.x;
    sprite.y=v.y;
    sprite.z=v.z;
    sprite.scaling=0.005*size;

    //snum = i/10;
    //if(!(i%12)) {
    snum = i/22;
    //trace(i, i%10, snum);
    //}

    /*randomX = Math.random() * 100 - 50;
    randomY = Math.random() * 100 - 50;
    randomZ = Math.random() * 100 - 50; */
    spriteObj = new Sprite3DObject(sprite, sprite.x, sprite.y, sprite.z, 0, 0, 0)
    spriteObjects.push(spriteObj);
    //trace(sprite);
    spriteMesh.addSprite(sprite);

           //Tweener.addTween(sprite, {y:20, delay:snum/2, time:2, transition:"easeOutQuad", onComplete:waveBack, onCompleteParams:[spriteObj] });

    }

    }


    private function addListen():void {

    stage.addEventListener(Event.RESIZE,onResize);
    stage.addEventListener(MouseEvent.MOUSE_DOWN,mouseDown);
    stage.addEventListener(MouseEvent.MOUSE_UP,mouseUp);
    stage.addEventListener(MouseEvent.MOUSE_WHEEL,mouseWheel);
    this.addEventListener(Event.ENTER_FRAME,loop);
    }
    private function loop(event:Event):void {

    view.render();
    updateCamera();

    }

    // updates the camera position
    private function updateCamera():void {

    if (doRotation) {

    // convert the change in mouse position into a change in camera angle
    var dPitch:Number = (mouseY - lastMouseY) / 2;
    var dYaw:Number = (mouseX - lastMouseX) / 2;

    // update the camera angles
    cameraPitch-=dPitch;
    cameraYaw-=dYaw;
    // limit the pitch of the camera
    if (cameraPitch<=0) {
    cameraPitch=0.1;
    } else if (cameraPitch >= 180) {
    cameraPitch=179.9;
    }

    // reset the last mouse position
    lastMouseX=mouseX;
    lastMouseY=mouseY;

    // reposition the camera
    setCameraPosition();
    }

    }

    private function setCameraPosition():void {
    camera.y=CAMERA_ORBIT*Math.cos(cameraPitch*Math.PI/180);
    camera.x=CAMERA_ORBIT*Math.sin(cameraPitch*Math.PI/180)*Math.cos(cameraYaw*Math.PI/180);
    camera.z=CAMERA_ORBIT*Math.sin(cameraPitch*Math.PI/180)*Math.sin(cameraYaw*Math.PI/180);
    // keep the camera looking at the origin
    camera.lookAt(new Number3D(0, 0, 0));
    }


    // called when mouse down on stage
    private function mouseDown(event:MouseEvent):void {
    doRotation=true;
    lastMouseX=event.stageX;
    lastMouseY=event.stageY;
    }

    // called when mouse up on stage
    private function mouseUp(event:MouseEvent):void {
    doRotation=false;
    }
    private function mouseWheel(e:MouseEvent):void {
    //trace("mouseWheel", e.delta);
    camera.fov-=e.delta;
    setCameraPosition();

    }
    // called when the window is resized
    private function onResize(event:Event):void {
    view.x=stage.stageWidth/2;
    view.y=stage.stageHeight/2;
    }


    }


    }