Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.03.2012, 13:23
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 1  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
По умолчанию Переделать из Alternativa в Away3D

Есть такой код Alternativa3D_8.27.0
Код AS3:
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);
		}
 
	}
}
Мне хочется собрать простейший пример с тенью. Вот если раскоментировать строку
Код AS3:
//rootContainer.addChild(directionalLight);
то тень появляется, но куб становится чёрным
Как этот простейший пример перевести на away (away3d-core-fp11_4_0_0_beta.swc)
Нужно что-бы была тень от куба на план. В авэй сильно сложные и тяжёлые примеры.
__________________
Гоночка

Старый 07.03.2012, 14:00
redefy вне форума Посмотреть профиль Отправить личное сообщение для redefy Посетить домашнюю страницу redefy Найти все сообщения от redefy
  № 2  
Ответить с цитированием
redefy
 
Аватар для redefy

Регистрация: Mar 2011
Сообщений: 58
Это очень абстрактный вопрос: как...
Нужно изучить инициализацию движка, работу с геометрией, примитивами, источниками света, материалами...

Можете посмотреть эту статью, там про самые основы Away3D 4.0:
http://redefy.net/2012/03/03/away3d40-basics/

Старый 07.03.2012, 15:12
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 3  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
redefy, статью уже читал, но что-то не получается
Код AS3:
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();
			//кон авей
		}
 
	}
}
Работа выполнена на 90%
Перевод на авей +
Куб +
План +
Камера +
Нифига на видно -
Теней от куба нет -
__________________
Гоночка

Старый 07.03.2012, 16:18
redefy вне форума Посмотреть профиль Отправить личное сообщение для redefy Посетить домашнюю страницу redefy Найти все сообщения от redefy
  № 4  
Ответить с цитированием
redefy
 
Аватар для redefy

Регистрация: Mar 2011
Сообщений: 58
1) Запрашивать контекст вручную не надо.
2) Контейнер не добавлен на сцену.
3) Чтоб добавить тени, нужно указать какие источники света будет использоваться для расчета теней, какой метод будет использоваться для расчета теней.
Код AS3:
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;

Старый 07.03.2012, 19:55
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 5  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
redefy, круто что-то появилось на экране
Код AS3:
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();
		}
 
	}
}


Не понятно, что за фигура, явно не куб, но крутится, теней по прежнему нет, по поводу, что не надо запрашивать контекст - не понял, как сделать "не_надо".
__________________
Гоночка

Старый 07.03.2012, 20:25
redefy вне форума Посмотреть профиль Отправить личное сообщение для redefy Посетить домашнюю страницу redefy Найти все сообщения от redefy
  № 6  
Ответить с цитированием
redefy
 
Аватар для redefy

Регистрация: Mar 2011
Сообщений: 58
Вот так:
Код AS3:
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();
		}
	}
}

Старый 07.03.2012, 20:35
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 7  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
redefy СУПЕР!!! тень афигенная и свет на кубике отлично смотрится. Спасибо.
__________________
Гоночка

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.