|
|
|||||
Переделать из Alternativa в Away3D
Есть такой код Alternativa3D_8.27.0
package { import alternativa.engine3d.controllers.*; import alternativa.engine3d.core.*; import alternativa.engine3d.lights.*; import alternativa.engine3d.materials.*; import alternativa.engine3d.primitives.*; import alternativa.engine3d.resources.*; import alternativa.engine3d.shadows.*; import flash.display.*; import flash.events.*; /** * Alternativa3D "Hello world!" application. * Создание простейшего трёхмерного приложения. */ public class HelloAlternativa3D extends Sprite { private var rootContainer:Object3D = new Object3D(); private var camera:Camera3D; private var stage3D:Stage3D; private var box:Box; public function HelloAlternativa3D() { // Ресурсы stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage3D = stage.stage3Ds[0]; stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate); stage3D.requestContext3D(); } private function onContextCreate(e:Event):void { //ресурсы var grass_diffuse:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0xFF0000)); var grass_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0x7F7FFF)); var box_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0xFFFFFF)); grass_diffuse.upload(stage3D.context3D); grass_normal.upload(stage3D.context3D); box_normal.upload(stage3D.context3D); // Camera and view // Создание камеры и вьюпорта camera = new Camera3D(0.1, 10000); camera.view = new View(stage.stageWidth, stage.stageHeight, false, 0, 0, 4); addChild(camera.view); addChild(camera.diagram); // Initial position // Установка положения камеры camera.rotationX = -120*Math.PI/180; camera.y = -800; camera.z = 400; rootContainer.addChild(camera); // Light sources // Источники света var ambientLight:AmbientLight = new AmbientLight(0x333333); ambientLight.intensity = 3; rootContainer.addChild(ambientLight); var directionalLight:DirectionalLight = new DirectionalLight(0xFFFF99); directionalLight.z = 20000; directionalLight.y = -20000; directionalLight.x = 20000; directionalLight.intensity = 1; directionalLight.lookAt(2000, 0, 0); //rootContainer.addChild(directionalLight); // Primitive box // Создание примитива box = new Box(250, 250, 250, 1, 1, 1, true); box.z = 200; var material:StandardMaterial = new StandardMaterial(box_normal, box_normal); box.setMaterialToAllSurfaces(material); rootContainer.addChild(box); var plane:Plane = new Plane(1000, 1000); var planeMaterial:StandardMaterial = new StandardMaterial(grass_diffuse, grass_normal); plane.setMaterialToAllSurfaces(planeMaterial); rootContainer.addChild(plane); // Shadow // Тень var shadow:DirectionalLightShadow = new DirectionalLightShadow(1000, 1000, -500, 500, 512, 2); shadow.biasMultiplier = 0.97; shadow.addCaster(plane); shadow.addCaster(box); directionalLight.shadow = shadow; for each (var resource:Resource in rootContainer.getResources(true)) { resource.upload(stage3D.context3D); } // Listeners // Подписка на события stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(e:Event):void { // Width and height of view // Установка ширины и высоты вьюпорта camera.view.width = stage.stageWidth; camera.view.height = stage.stageHeight; // Rotation // Вращение примитива box.rotationZ -= 0.01; // Render // Отрисовка camera.render(stage3D); } } } то тень появляется, но куб становится чёрным Как этот простейший пример перевести на away (away3d-core-fp11_4_0_0_beta.swc) Нужно что-бы была тень от куба на план. В авэй сильно сложные и тяжёлые примеры.
__________________
Гоночка |
|
|||||
Регистрация: Mar 2011
Сообщений: 58
|
Это очень абстрактный вопрос: как...
Нужно изучить инициализацию движка, работу с геометрией, примитивами, источниками света, материалами... Можете посмотреть эту статью, там про самые основы Away3D 4.0: http://redefy.net/2012/03/03/away3d40-basics/ |
|
|||||
redefy, статью уже читал, но что-то не получается
package { import away3d.cameras.*; import away3d.containers.*; import away3d.controllers.*; import away3d.debug.*; import away3d.entities.*; import away3d.extrusions.*; import away3d.lights.*; import away3d.materials.*; import away3d.materials.lightpickers.*; import away3d.materials.methods.*; import away3d.primitives.*; import away3d.textures.*; //import com.bit101.components.Label; import flash.display.*; import flash.events.*; import flash.filters.*; import flash.geom.*; import flash.net.*; import flash.ui.*; import flash.utils.*; import flash.display.*; import flash.events.*; /** * Alternativa3D "Hello world!" application. * Создание простейшего трёхмерного приложения. */ public class HelloAlternativa3DtoAway3d extends Sprite { //private var rootContainer:Object3D = new Object3D();//Alternativa private var rootContainer:ObjectContainer3D = new ObjectContainer3D();//Away3d private var camera:Camera3D;//Away3d Alternativa private var stage3D:Stage3D;//Alternativa //private var box:Box;//Alternativa private var box:Mesh;//Away3d private var view:View3D//Away3d public function HelloAlternativa3DtoAway3d() { // Ресурсы stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage3D = stage.stage3Ds[0]; stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate); stage3D.requestContext3D(); } private function onContextCreate(e:Event):void { //ресурсы //нач альтернатива //var grass_diffuse:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0xFF0000)); //var grass_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0x7F7FFF)); //var box_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0xFFFFFF)); //кон альтернатива //нач авей var grass_diffuse:BitmapTexture = new BitmapTexture(new BitmapData(2, 2, false, 0xFF0000)); var grass_normal:BitmapTexture = new BitmapTexture(new BitmapData(2, 2, false, 0x7F7FFF)); var box_normal:BitmapTexture = new BitmapTexture(new BitmapData(2, 2, false, 0xFFFFFF)); //кон авей //нач альтернатива //grass_diffuse.upload(stage3D.context3D); //grass_normal.upload(stage3D.context3D); //box_normal.upload(stage3D.context3D); //кон альтернатива //нач авей //хто-то знает //кон авей // Camera and view // Создание камеры и вьюпорта //нач алт //camera = new Camera3D(0.1, 10000); //camera.view = new View(stage.stageWidth, stage.stageHeight, false, 0, 0, 4); //addChild(camera.view); //addChild(camera.diagram); //кон алт //нач аве var scene:Scene3D = new Scene3D(); //setup camera for optimal shadow rendering camera = new Camera3D(); camera.lens.far = 2100; view = new View3D(); view.scene = scene; view.camera = camera; //setup controller to be used on the camera //cameraController = new HoverController(camera, null, 45, 20, 1000, 10); //setup parser to be used on loader3D //Parsers.enableAllBundled(); //view.addSourceURL("srcview/index.html"); addChild(view); //кон аве // Initial position // Установка положения камеры //нач аль //camera.rotationX = -120*Math.PI/180; //camera.y = -800; //camera.z = 400; //rootContainer.addChild(camera); //кон аль //нач аве camera.rotationX = -120*Math.PI/180; camera.z = -800; camera.y = 400; rootContainer.addChild(camera); //кон аве // Light sources // Источники света /* var ambientLight:AmbientLight = new AmbientLight(0x333333); ambientLight.intensity = 3; rootContainer.addChild(ambientLight); */ //нач аль //var directionalLight:DirectionalLight = new DirectionalLight(0xFFFF99); //directionalLight.z = 20000; //directionalLight.y = -20000; //directionalLight.x = 20000; //directionalLight.intensity = 1; //directionalLight.lookAt(2000, 0, 0); //кон аль //нач аве var directionalLight:DirectionalLight = new DirectionalLight(-1, -1, 1); directionalLight.y = 20000; directionalLight.z = -20000; directionalLight.x = 20000; //directionalLight.intensity = 1;//кто-то знает directionalLight.lookAt(new Vector3D(2000, 0, 0)); //кон аве //rootContainer.addChild(directionalLight);//строка - тень появляется, но куб становится чёрным // Primitive box // Создание примитива //нач альт //box = new Box(250, 250, 250, 1, 1, 1, true); //box.z = 200; //var material:StandardMaterial = new StandardMaterial(box_normal, box_normal); ///box.setMaterialToAllSurfaces(material); //rootContainer.addChild(box); //var plane:Plane = new Plane(1000, 1000); //var planeMaterial:StandardMaterial = new StandardMaterial(grass_diffuse, grass_normal); //plane.setMaterialToAllSurfaces(planeMaterial); //rootContainer.addChild(plane); //кон альт //нач аве var boxG:CubeGeometry = new CubeGeometry(250, 250, 250, 1, 1, 1); box = new Mesh(boxG); box.y = 200; var material:TextureMaterial = new TextureMaterial(box_normal);// , box_normal); box.material = material; rootContainer.addChild(box); var plane:Mesh = new Mesh(new PlaneGeometry(1000, 1000)); var planeMaterial:TextureMaterial = new TextureMaterial(grass_diffuse);// , grass_normal); plane.material = planeMaterial; rootContainer.addChild(plane); //кон аве // Shadow // Тень //нач аль //var shadow:DirectionalLightShadow = new DirectionalLightShadow(1000, 1000, -500, 500, 512, 2); //shadow.biasMultiplier = 0.97; //shadow.addCaster(plane); //shadow.addCaster(box); //directionalLight.shadow = shadow; //кон аль //нач аве //кто-то знает //кон аве //нач аль //for each (var resource:Resource in rootContainer.getResources(true)) { // resource.upload(stage3D.context3D); //} //кон аль //нач аве //кто-то знает //кон аве // Listeners // Подписка на события stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);//Away3d Alternativa } private function onEnterFrame(e:Event):void { //нач аль // Width and height of view // Установка ширины и высоты вьюпорта //camera.view.width = stage.stageWidth; //camera.view.height = stage.stageHeight; // Rotation // Вращение примитива //box.rotationZ -= 0.01; // Render // Отрисовка //camera.render(stage3D); //кон аль //нач авей box.rotationY -= 0.01; view.render(); //кон авей } } } Перевод на авей + Куб + План + Камера + Нифига на видно - Теней от куба нет -
__________________
Гоночка |
|
|||||
Регистрация: Mar 2011
Сообщений: 58
|
1) Запрашивать контекст вручную не надо.
2) Контейнер не добавлен на сцену. 3) Чтоб добавить тени, нужно указать какие источники света будет использоваться для расчета теней, какой метод будет использоваться для расчета теней. var lightPicker:StaticLightPicker = new StaticLightPicker([sunLight, skyLight]); var filteredShadowMapMethod:FilteredShadowMapMethod = new FilteredShadowMapMethod(sunLight); var material:TextureMaterial = new TextureMaterial(new BitmapTexture((new Texture01()).bitmapData), true, true, true); material.lightPicker = lightPicker; material.shadowMethod = filteredShadowMapMethod; material.ambient = 0.5; |
|
|||||
redefy, круто что-то появилось на экране
package { import away3d.cameras.*;import away3d.containers.*;import away3d.controllers.*;import away3d.debug.*; import away3d.entities.*;import away3d.extrusions.*;import away3d.lights.*;import away3d.materials.*; import away3d.materials.lightpickers.*;import away3d.materials.methods.*;import away3d.primitives.*; import away3d.textures.*; //import com.bit101.components.Label; import flash.display.*;import flash.events.*;import flash.filters.*;import flash.geom.*; import flash.net.*;import flash.ui.*;import flash.utils.*;import flash.events.*; /** * HelloAlternativa3DtoAway3d "Hello world!" application. * Создание простейшего трёхмерного приложения. */ public class HelloAlternativa3DtoAway3d extends Sprite { private var rootContainer:ObjectContainer3D = new ObjectContainer3D(); private var camera:Camera3D; private var stage3D:Stage3D; private var box:Mesh; private var view:View3D; public function HelloAlternativa3DtoAway3d() { // Ресурсы stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; stage3D = stage.stage3Ds[0]; stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContextCreate); stage3D.requestContext3D(); } private function onContextCreate(e:Event):void { var scene:Scene3D = new Scene3D(); //setup camera for optimal shadow rendering camera = new Camera3D(); camera.lens.far = 2100; view = new View3D(); view.scene = scene; view.camera = camera; addChild(view); camera.rotationX = -120*Math.PI/180; camera.z = -800; camera.y = 400; rootContainer.addChild(camera); var directionalLight:DirectionalLight = new DirectionalLight(-1, -1, 1); directionalLight.y = 20000; directionalLight.z = -20000; directionalLight.x = 20000; //directionalLight.intensity = 1;//кто-то знает directionalLight.lookAt(new Vector3D(2000, 0, 0)); //нач свет и тени var sunLight:DirectionalLight = directionalLight; var lightPicker:StaticLightPicker = new StaticLightPicker([sunLight]);//[sunLight, skyLight]); var filteredShadowMapMethod:FilteredShadowMapMethod = new FilteredShadowMapMethod(sunLight); var material:TextureMaterial = new TextureMaterial(new BitmapTexture(new BitmapData(2, 2, false, 0xFF0000)));// , true)); material.lightPicker = lightPicker; material.shadowMethod = filteredShadowMapMethod; material.ambient = 0.5; //кон свет и тени var boxG:CubeGeometry = new CubeGeometry(250, 250, 250, 1, 1, 1); box = new Mesh(boxG); box.y = 200; box.material = material; rootContainer.addChild(box); var plane:Mesh = new Mesh(new PlaneGeometry(1000, 1000)); plane.material = material; rootContainer.addChild(plane); scene.addChild(rootContainer); stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);//Away3d Alternativa } private function onEnterFrame(e:Event):void { box.rotationY -= 1; //в градусах view.render(); } } } Не понятно, что за фигура, явно не куб, но крутится, теней по прежнему нет, по поводу, что не надо запрашивать контекст - не понял, как сделать "не_надо".
__________________
Гоночка |
|
|||||
Регистрация: Mar 2011
Сообщений: 58
|
Вот так:
package test { import away3d.cameras.*; import away3d.containers.*; import away3d.entities.*; import away3d.lights.*; import away3d.materials.*; import away3d.materials.lightpickers.*; import away3d.materials.methods.*; import away3d.primitives.*; import away3d.textures.*; import flash.display.*; import flash.events.*; /** * HelloAlternativa3DtoAway3d "Hello world!" application. * Создание простейшего трёхмерного приложения. */ public class HelloAlternativa3DtoAway3d extends Sprite { private var container:ObjectContainer3D; private var box:Mesh; private var plane:Mesh; private var view:View3D; private var controller:SimpleObjectController; public function HelloAlternativa3DtoAway3d() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; init(); } private function init():void { view = new View3D(); view.camera.lens.far = 10000; view.camera.moveTo( -170, 1361, -1221); view.camera.rotateTo(45, 2, 0); addChild(view); container = new ObjectContainer3D(); view.scene.addChild(container); var sunLight:DirectionalLight = new DirectionalLight(-1, -0.4, 1); sunLight.color = 0xFFFFFF; sunLight.castsShadows = true; sunLight.ambient = 1; sunLight.diffuse = 1; sunLight.specular = 1; container.addChild(sunLight); var lightPicker:StaticLightPicker = new StaticLightPicker([sunLight]); var filteredShadowMapMethod:SoftShadowMapMethod = new SoftShadowMapMethod(sunLight); filteredShadowMapMethod.epsilon = 0.005; var material:TextureMaterial = new TextureMaterial(new BitmapTexture(new BitmapData(2, 2, false, 0xFF0000)), true, true); material.lightPicker = lightPicker; material.shadowMethod = filteredShadowMapMethod; material.ambient = 0.5; container.addChild(box = new Mesh(new CubeGeometry(250, 250, 250, 1, 1, 1), material)); material = new TextureMaterial(new BitmapTexture(new BitmapData(2, 2, false, 0x00FF00)), true, true); material.lightPicker = lightPicker; material.shadowMethod = filteredShadowMapMethod; material.ambient = 0.5; container.addChild(plane = new Mesh(new PlaneGeometry(3000, 3000), material)).y = -125; stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(e:Event):void { box.rotationY -= 1; //в градусах view.render(); } } } |
Часовой пояс GMT +4, время: 04:33. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|