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

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

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

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

Тут есть пример с кровью http://redefy.net/2011/10/28/%d1%83%...api-chapter-3/
Надо подобное для away, что-то не нашел (наверняка есть), набросал простой танк который едет на плоскости
Код AS3:
package {
	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.*;import flash.geom.*;import flash.ui.*;
 
	/**
	 * попытка следов шин.
	 */
	public class CarAway3d extends Sprite {
		private var container:ObjectContainer3D;
		private var box:Mesh;
		private var plane:Mesh;
		private var view:View3D;
 
		private var move:Boolean, revers:Boolean, right:Boolean, left:Boolean;
		private var carPos:Point = new Point(), carRotation:Number = 0;
 
		//private var controller:SimpleObjectController;
 
		public function CarAway3d() {
			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);
			with (sunLight) { color = 0xFFFF80; castsShadows = true; ambient = 1; diffuse = 1; 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(100, 50, 200, 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 = -20;
 
 
			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
			stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
 
			stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
 
		private function onEnterFrame(e:Event):void {
			var m:Matrix = new Matrix();
			if (move) m.translate(0,10); if (revers) m.translate( 0,-10);
			if (right) m.rotate(carRotation-=0.1); if (left) m.rotate( carRotation+=0.1);
			if (!left && !right) m.rotate(carRotation);
			carPos = carPos.add(m.transformPoint(new Point()));
 
			box.rotationY = -carRotation * (180 / Math.PI);; //в градусах
			box.x = carPos.x;
			box.z = carPos.y;
			view.render();
		}
 
		private function keyHandler(e:KeyboardEvent):void {
			var k:int = e.keyCode; //w - 87 a - 65 d - 68 s - 83
			if (e.type == KeyboardEvent.KEY_DOWN) var t:Boolean = true;
			if (k == Keyboard.UP || k == 87) move = t;
			if (k == Keyboard.DOWN || k == 83) revers = t;
			if (k == Keyboard.RIGHT || k == 68) right = t;
			if (k == Keyboard.LEFT || k == 65) left = t;
		}
 
	}
}
Надо как-то на большой плоскости отрисовать траекторию езды
Код AS3:
			box.x = carPos.x;
			box.z = carPos.y;
Ну или хоть что-то отрисовать, можно конечно плоскости добавлять вместо следов, но это не то что надо, будет некрасиво.
__________________
Гоночка

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

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
UVS мап не подходит. Битмап 2x2 пикселя и она как ресурс должна как-то в плеере регистрироваться. Тут надо специальную AGAL программу, что-бы она рисовала этот след, наподобие того как рисуется тень в том же Away 4.0 или например ещё есть Wire материал то-же рисуется через AGAL без текстуры. В общем это очень сложно, я в support авеям написал, но они не знают как это сделать и молчат.
__________________
Гоночка

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

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
О!!! Мне на away3d.com ответили
>>Try projector.
Я рад, вот оно решение... Кто нибуть знает как попробовать projector?
__________________
Гоночка

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

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
потестил projector - вообще не то, смотрится ужасно, на те места куда попадает текстура от проектора не ложится тень, для следов шин и пуль не подходит так как надо перерисовывать ему битмап, предварительно его надо передавать в контекст3Д от этого жуткие тормоза.
админ мне ответил там если у вас снег или песок надо делать то-то, если асфальт то вот (проще всего)

If your terrain is sand or snow, yes drawing directly into the normalmap is the nicest thing to do. It will cost bitmapdata edits and uploads. If its mud, normalmap and diffusemap updates required.
If you need only “black” rubber and terrain is asphalt. you need only to use the diffusemap. I would here combine geometry and draw. Like say every x burnouts, draw the maps and clear geometry. This is of importance if you want it to run on phones.
Drawback here is the repeats. You will need to have more maps to cover your terrain. Which brings us to the last option, using LightMapMethod, where you could draw directly into your “B&W tires” map 1/1 yet no issue on floor/terrain tiling.

Я пока что-то не вкуриваю, но это самый простой путь.
__________________
Гоночка

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

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

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


 


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


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