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:
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:
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.