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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.12.2012, 18:43
vorodis2 вне форума Посмотреть профиль Отправить личное сообщение для vorodis2 Найти все сообщения от vorodis2
  № 1  
Ответить с цитированием
vorodis2

Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
По умолчанию Тень. Как убрать текстуру но оставить тень

Собственно есть демо от альтернативы
Ссылка на демку
Нужно получить тень без текстуры. То есть на плане где лежит трава, нужна прозрачна текстура, а на ней тени. Собственно нужны тени без самой текстуры травы??????



Код всей этой красоты, хотя он прилагается с библиотекой
Код AS3:
package shadowsexample {
 
	import alternativa.engine3d.controllers.SimpleObjectController;
	import alternativa.engine3d.core.Camera3D;
	import alternativa.engine3d.core.Object3D;
	import alternativa.engine3d.core.View;
	import alternativa.engine3d.lights.AmbientLight;
	import alternativa.engine3d.lights.DirectionalLight;
	import alternativa.engine3d.materials.StandardMaterial;
	import alternativa.engine3d.primitives.Box;
	import alternativa.engine3d.primitives.Plane;
	import alternativa.engine3d.resources.BitmapTextureResource;
	import alternativa.engine3d.shadows.DirectionalLightShadow;
 
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.Stage3D;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.geom.Matrix3D;
	import flash.ui.Keyboard;
 
	/**
	 * Shadows usage example.
	 * Пример использования теней.
	 */
	[SWF(backgroundColor="#000000", frameRate="60", width="600", height="600")]
	public class ShadowsExample extends Sprite {
 
		[Embed(source="bark_diffuse.jpg")]
		private static const EmbedBarkDiffuse:Class;
		[Embed(source="bark_normal.jpg")]
		private static const EmbedBarkNormal:Class;
		[Embed(source="branch_diffuse.jpg")]
		private static const EmbedBranchDiffuse:Class;
		[Embed(source="branch_normal.jpg")]
		private static const EmbedBranchNormal:Class;
		[Embed(source="branch_opacity.jpg")]
		private static const EmbedBranchOpacity:Class;
		[Embed(source="grass.jpg")]
		private static const EmbedGrassDiffuse:Class;
 
		private var rootContainer:Object3D = new Object3D();
 
		private var camera:Camera3D;
		private var controller:SimpleObjectController;
 
		private var stage3D:Stage3D;
 
		private var tree:Object3D;
		private var counter:Number = 1;
		private var shadow:DirectionalLightShadow;
		private var ambientLight:AmbientLight;
		private var directionalLight:DirectionalLight;
 
		public function ShadowsExample() {
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
 
			stage3D = stage.stage3Ds[0];
			stage3D.addEventListener(Event.CONTEXT3D_CREATE, init);
			stage3D.requestContext3D();
		}
 
		private function init(e:Event):void {
			// Creates help message
			createLabel();
			// Camera and view
			// Создание камеры и вьюпорта
			camera = new Camera3D(10, 100000);
 
			camera.view = new View(stage.stageWidth, stage.stageHeight, false, 0xa4c4d7, 1, 8);
			addChild(camera.view);
			addChild(camera.diagram);
 
			// Initial position
			// Установка начального положения камеры
			var matrix:Matrix3D = new Matrix3D(Vector.<Number>([-0.6691306829452515, -0.7431448101997375, 0, 0, -0.10342574119567871, 0.09312496334314346, -0.9902680516242981, 0, 0.735912561416626, -0.6626186966896057, -0.13917307555675507, 0, -333.00445556640625, 237.38864135742188, 290.38525390625, 1]));
			camera.matrix = matrix;
			controller = new SimpleObjectController(stage, camera, 200);
			rootContainer.addChild(camera);
 
			// Resources
			// Ресурсы
			var grass_diffuse:BitmapTextureResource = new BitmapTextureResource(new EmbedGrassDiffuse().bitmapData);
			var grass_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0x7F7FFF));
			var bark_diffuse:BitmapTextureResource = new BitmapTextureResource(new EmbedBarkDiffuse().bitmapData);
			var bark_normal:BitmapTextureResource = new BitmapTextureResource(new EmbedBarkNormal().bitmapData);
			var branch_diffuse:BitmapTextureResource = new BitmapTextureResource(new EmbedBranchDiffuse().bitmapData);
			var branch_normal:BitmapTextureResource = new BitmapTextureResource(new EmbedBranchNormal().bitmapData);
			var branch_opacity:BitmapTextureResource = new BitmapTextureResource(new EmbedBranchOpacity().bitmapData);
			grass_diffuse.upload(stage3D.context3D);
			grass_normal.upload(stage3D.context3D);
			bark_diffuse.upload(stage3D.context3D);
			bark_normal.upload(stage3D.context3D);
			branch_diffuse.upload(stage3D.context3D);
			branch_normal.upload(stage3D.context3D);
			branch_opacity.upload(stage3D.context3D);
 
			// Materials
			// Материалы
			var grassMaterial:StandardMaterial = new StandardMaterial(grass_diffuse, grass_normal);
			grassMaterial.specularPower = 0.14;
			var barkMaterial:StandardMaterial = new StandardMaterial(bark_diffuse, bark_normal);
			var branchMaterial:StandardMaterial = new StandardMaterial(branch_diffuse, branch_normal, null, null, branch_opacity);
			branchMaterial.specularPower = 0;
			branchMaterial.alphaThreshold = 0.8;
 
			// Models
			// Модели
 
			var grass:Plane = new Plane(900, 900);
			grass.geometry.upload(stage3D.context3D);
			grass.setMaterialToAllSurfaces(grassMaterial);
			rootContainer.addChild(grass);
 
			var platform:Box = new Box(300, 300, 50);
			platform.geometry.upload(stage3D.context3D);
			platform.setMaterialToAllSurfaces(barkMaterial);
			platform.z = 25;
			rootContainer.addChild(platform);
 
			var balk1:Box = new Box(30, 30, 250);
			balk1.geometry.upload(stage3D.context3D);
			balk1.setMaterialToAllSurfaces(barkMaterial);
			balk1.x = -180;
			balk1.y = 180;
			balk1.z = 125;
			rootContainer.addChild(balk1);
			var balk2:Box = balk1.clone() as Box;
			balk2.x = 180;
			rootContainer.addChild(balk2);
			var balk3:Box = balk2.clone() as Box;
			balk3.y = -180;
			rootContainer.addChild(balk3);
			var balk4:Box = balk3.clone() as Box;
			balk4.x = -180;
			rootContainer.addChild(balk4);
 
			tree = new Object3D();
			tree.z = 50;
			var branch:Plane = new Plane(400, 400);
			branch.geometry.upload(stage3D.context3D);
			branch.setMaterialToAllSurfaces(branchMaterial);
			branch.rotationX = Math.PI/2;
			branch.rotationZ = Math.PI/4;
			branch.z = 200;
			tree.addChild(branch);
			branch = branch.clone() as Plane;
			branch.rotationZ += Math.PI/2;
			tree.addChild(branch);
			rootContainer.addChild(tree);
 
			// Light sources
			// Источники света
			ambientLight = new AmbientLight(0x333390);
			rootContainer.addChild(ambientLight);
			directionalLight = new DirectionalLight(0xFFFF60);
			directionalLight.lookAt(-0.5, -1, -1);
			rootContainer.addChild(directionalLight);
 
			// Shadow
			// Тень
			shadow = new DirectionalLightShadow(1000, 1000, -500, 500, 1024, 0.2);
			shadow.biasMultiplier = .98;
			shadow.addCaster(platform);
			shadow.addCaster(balk1);
			shadow.addCaster(balk2);
			shadow.addCaster(balk3);
			shadow.addCaster(balk4);
			shadow.addCaster(tree);
			directionalLight.shadow = shadow;
			shadow.debug = true;
 
			// Listeners
			// Подписка на события
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
			stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
			stage.addEventListener(Event.RESIZE, onResize);
		}
 
		private function createLabel():void {
			var info:TextInfo = new TextInfo();
			info.x = 5;
			info.y = 5;
			info.write("ASDF — move camera");
			info.write("Q — change shadow quality");
			info.write("I — use shadows debug");
			info.write("P, Shift+P — increase/decrease PCF size");
			info.write("[, Shift+[ — increase/decrease bias multiplier");
			info.write("7set work volume height to 1000");
			info.write("8set work volume height to 10000");
			info.write("9change shadow color to blue");
			info.write("0change shadow color to black");
			addChild(info);
		}
 
		private function onKeyDown(event:KeyboardEvent):void {
			switch (event.keyCode) {
				case Keyboard.SPACE :
					trace(camera.matrix.rawData);
					break;
				case Keyboard.I :
					shadow.debug = !shadow.debug;
					break;
				case Keyboard.LEFTBRACKET:
					shadow.biasMultiplier += event.shiftKey ? 0.01 : -0.01;
					break;
				case Keyboard.Q :
				{
					if (shadow.mapSize < 2048)
						shadow.mapSize *= 2;
					else
						shadow.mapSize = 128;
				}
					break;
				case Keyboard.P:
				{
					shadow.pcfOffset +=
							event.shiftKey ? -1 : 1;
				}
					break;
				case Keyboard.NUMBER_9:
				{
					directionalLight.color = 0xFFFF60;
					ambientLight.color = 0x333390
				}
					break;
				case Keyboard.NUMBER_0:
				{
					directionalLight.color = 0xFFFFa0;
					ambientLight.color = 0x333333;
				}
					break;
				case Keyboard.NUMBER_7:
				{
					shadow.farBoundPosition = 500;
					shadow.nearBoundPosition = -500
				}
					break;
				case Keyboard.NUMBER_8:
				{
					shadow.farBoundPosition = 5000;
					shadow.nearBoundPosition = -5000
				}
					break;
			}
		}
 
		private function onEnterFrame(e:Event):void {
			counter += .001*Math.sin(counter) + .01;
			tree.rotationY = Math.sin(counter)/7 - .2;
			controller.update();
			camera.render(stage3D);
		}
 
		private function onResize(e:Event = null):void {
			camera.view.width = stage.stageWidth;
			camera.view.height = stage.stageHeight;
		}
 
	}
}
 
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
 
class TextInfo extends Sprite {
	private var textField:TextField;
	private var bg:Sprite;
 
	public function TextInfo() {
		bg = new Sprite();
		with (bg.graphics) {
			beginFill(0x000000, .75);
			drawRect(0, 0, 10, 10);
			endFill();
		}
		textField = new TextField();
		textField.autoSize = TextFieldAutoSize.LEFT;
		textField.selectable = false;
		textField.defaultTextFormat = new TextFormat("Tahoma", 10, 0xFFFFFF);
		textField.x = 5;
		textField.y = 5;
		addChild(bg);
		addChild(textField);
	}
 
	public function write(value:String):void {
		textField.appendText(value + "\n");
		bg.width = textField.width + 10;
		bg.height = textField.height + 10;
	}
}

Старый 11.02.2013, 19:21
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 2  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
Полагаю сейчас у них этого нет . Можешь отрендерить объект на текстуру и его развернуть трансформом таким образом получив "тень"

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

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

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


 


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


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