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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

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

Регистрация: Mar 2012
Сообщений: 2
По умолчанию Имитация перспективной проекции

Задача - не применяя к объекту перспективной проекции, поместить его именно в ту
позицию, куда бы он попал, будь она применена.
"Погуглив", я решил, что должен помочь метод Utils3D.projectVector в связке с toMatrix3D().
Однако, улетаю куда-то в преисподнюю. Как сделать ????
Заранее благодарен.

Вот класс:

Код AS3:
package
{
	import flash.display.Sprite;
	import flash.geom.Matrix3D;
	import flash.geom.Point;
	import flash.geom.Vector3D;
	import flash.geom.Utils3D;
	import flash.geom.PerspectiveProjection;
	import flash.events.*;
 
	public class ImitPP extends Sprite
	{
		var box:Sprite;
		var box2:Sprite;
		var pp:PerspectiveProjection;
		var deltaFOV:int = 15;
 
public function ImitPP():void{
			if (stage) init();
				else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
public function init(e:Event = null):void {
		removeEventListener(Event.ADDED_TO_STAGE, init);
		createBoxes();
		pp =  new PerspectiveProjection();
		pp.projectionCenter = new Point(0,0);
		box.transform.perspectiveProjection = pp;
		stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
		}
public function reportKeyDown(event:KeyboardEvent):void {
	deltaFOV = -deltaFOV;
	pp.fieldOfView += deltaFOV;
 
	if (String.fromCharCode(event.charCode) == "c") {
		var mat3D:Matrix3D = pp.toMatrix3D();
		var v3D:Vector3D = Utils3D.projectVector(mat3D, box.transform.matrix3D.position);
		box.transform.matrix3D.position = v3D;
	}
	if (String.fromCharCode(event.charCode) == "a") {
		box.transform.perspectiveProjection = pp;
	}
}
public function createBoxes():void {
			box= new Sprite();
			box.graphics.beginFill(0xCCCCFF);
			box.graphics.drawRect(0, 0, 500, 500);
			box.graphics.endFill();
			box.x = 100;
			box.y = 100;
			box.z = 50;	
			addChild(box);
 
			box2= new Sprite();
			box2.graphics.beginFill(0x0000ff);
			box2.graphics.drawRect(0, 0, 100, 100);
			box2.graphics.endFill();
			box2.x = 50;
			box2.y = 50;
			box2.z = 100;	
			box.addChild(box2);
		}
	}
 
}


Последний раз редактировалось Gaen; 06.03.2012 в 12:21. Причина: подсветка AS3
Создать новую тему   Часовой пояс GMT +4, время: 01:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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