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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.08.2013, 13:17
pas.delger вне форума Посмотреть профиль Отправить личное сообщение для pas.delger Найти все сообщения от pas.delger
  № 1  
Ответить с цитированием
pas.delger
 
Аватар для pas.delger

блогер
Регистрация: Mar 2010
Сообщений: 108
Записей в блоге: 1
По умолчанию five3d и localToGlobal

Добрый день!

Использую five3d. Вторые сутки мучаюсь. Проблема, примерно, следующая:

Есть два Sprite3D, зеленый и красный. Красный находится внутри зеленого в точке (x: 150, y: 150). Зеленый спрайт повернут по X на 45 градусов. Есть обычный синий спрайт который находится на обычной сцене. Нужно установить синий спрайт в проекцию красного. Беру точку следующим образом:

Код AS3:
var p:Point = green.local3DToGlobal(new Vector3D(red.x, red.y, red.z));			
blue.x = p.x;
blue.y = p.y;
Но, как видно из примера, координата рассчитывается не верно...

test.swf   (12.8 Кб)


Либо я что-то не так делаю, либо, неужели, это невозможно средствами five3d? Буду очень рад любой подсказке... Может, кто-нибудь сталкивался?

Весь код:

Код AS3:
package {
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.geom.Matrix3D;
	import flash.geom.Point;
	import flash.geom.Vector3D;
	import flash.utils.Timer;
	import net.badimon.five3D.display.Scene3D;
	import net.badimon.five3D.display.Shape3D;
	import net.badimon.five3D.display.Sprite2D;
	import net.badimon.five3D.display.Sprite3D;
 
	public class Main extends Sprite {
 
		public function Main():void {
			if (stage)
				init();
			else
				addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
 
			var scene3d:Scene3D = new Scene3D;
			addChild(scene3d);
 
			var green:Sprite3D = new Sprite3D;
			green.graphics3D.beginFill(0x00ff00);
			green.graphics3D.drawRect(0, 0, 300, 300);
			green.graphics3D.endFill();
			green.rotationX = -45;
			scene3d.addChild(green);
 
			var red:Sprite3D = new Sprite3D;
			red.graphics3D.beginFill(0xff0000);
			red.graphics3D.drawRect(-20, -20, 40, 40);
			red.graphics3D.endFill();
			green.addChild(red);
 
			red.x = 150;
			red.y = 150;
 
			var blue:Sprite = new Sprite;
			blue.graphics.beginFill(0x0000ff);
			blue.graphics.drawRect(-10, -10, 20, 20);
			blue.graphics.endFill();
			addChild(blue);
 
			var p:Point = green.local3DToGlobal(new Vector3D(red.x, red.y, red.z));
 
			blue.x = p.x;
			blue.y = p.y;
		}
 
	}
}
Вложения
Тип файла: swf test.swf (12.8 Кб, 76 просмотров)

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

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

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


 


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


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