Flex ve Papervision3D

Zaman buldukçada Flexi inceliyorum.Hızlı uygulama geliştirme açısından size tavsiye edebilirim.

Eclipse üzerine geliştirilmiş bu IDE nin özellikleri saymakla bitmez ve bence şuan Flex konsunda uzman olan bir çok kişide bu harika IDenin tüm nimetlerinden faydalanamıyor.(Ben zaten kullanamıyorum.)

Bu örnekteki 2. konu ise Papervision uygulamarındaki en büyük sorun olan 2 objenin birbirini hunharca kesmesi.Bu kesişmleri engellemenin bir çok yolu var ancak hiç biri bu kadar etkili değil :)

Yöntem şu: Flashta hali hazırda bulunan ve tasarım anında hayat kurtaran “Layer” kavramını uygulamak.
Papervisiondaki karşılığı “ViewportLayer” sınıfı ile ilgili basit bir örnektir:

package {
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.GlowFilter;

import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.math.Quaternion;
import org.papervision3d.core.utils.Mouse3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.view.layer.ViewportLayer;
import org.papervision3d.view.layer.util.ViewportLayerSortMode

public class AS3PV3D extends Sprite
{

private var view:Viewport3D
private var scene:Scene3D
private var camera:Camera3D
private var renderer:BasicRenderEngine
private var kure:Sphere

private var plane:Sphere
private var mouse3D:Mouse3D

private var mouseQuad:Quaternion=new Quaternion();
private var planeQuat:Quaternion=new Quaternion();
private var sphereQuat:Quaternion=new Quaternion();
private var slerp:Number=0

public function AS3PV3D()
{
view=new Viewport3D(stage.stageWidth,stage.stageHeight,false,true);
this.addChild(view);

Mouse3D.enabled=true
mouse3D=view.interactiveSceneManager.mouse3D

view.containerSprite.sortMode=ViewportLayerSortMode.INDEX_SORT

var light:PointLight3D=new PointLight3D();

scene=new Scene3D();
camera=new Camera3D();
renderer=new BasicRenderEngine();

var shade:FlatShadeMaterial=new FlatShadeMaterial(light,0xFFFFFF);
shade.interactive=true
kure=new Sphere(shade,400,30,30);
kure.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,click);
scene.addChild(kure);

var shade2:FlatShadeMaterial=new FlatShadeMaterial(light,0x0000FF);

plane=new Sphere(shade2,10);
plane.z =-400
scene.addChild(plane);

var planeLayer:ViewportLayer=new ViewportLayer(view,plane);
planeLayer.layerIndex=0
//view.containerSprite.addLayer(planeLayer)

//var g:GlowFilter=new GlowFilter(0xFF0000,1,10,10,3,3);
//planeLayer.filters=[g]

camera.lookAt(kure);

stage.addEventListener(Event.ENTER_FRAME,render);

}
private function click(e:InteractiveScene3DEvent):void
{
mouseQuad=Quaternion.createFromMatrix(mouse3D.transform)
planeQuat=Quaternion.createFromMatrix(plane.transform);
slerp=0

}
private function render(e:Event):void
{

mouseQuad=Quaternion.createFromMatrix(kure.transform)

slerp += (1 – slerp) * .1;

kure.rotationY-=1

plane.rotationY+=7
plane.rotationZ+=1

sphereQuat=Quaternion.slerp(planeQuat,mouseQuad,slerp);
plane.transform=sphereQuat.matrix;
plane.moveBackward(500);

renderer.renderScene(scene,camera,view);
}

}
}

Kodda plane adı ile geçen arkadaş aslında küçük mavi küre.
Çalışmanın meyvesi:

as3pv3d1

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Bir Cevap Yazın