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

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

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

Регистрация: Feb 2014
Сообщений: 57
По умолчанию Как работает ось Z

Немного не понял каким образом работает ось z, насколько я понимаю она должна быть направлена перпендикулярно плоскости монитора, но когда начинаю менять координату z - объекта, он начинает "съезжать" (визуально менять координату центра), а ммне нужно чтобы он увеличивался относительно центра, как такое можно сделать? Также интересует каким образом зависит "съезжание" объекта от положения точки регистрации ?

Старый 18.02.2014, 10:53
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>он начинает "съезжать"
зависит от того, откуда 'смотрим'
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.geom.Point;
 
 
	public class Main extends Sprite 
	{
		private var obj:Sprite = new Sprite();
		public function Main():void 
		{
			obj.graphics.beginFill(0x0080FF);
			obj.graphics.drawCircle(0, 0, 50);
			addChild(obj);
			stage.addEventListener(MouseEvent.MOUSE_WHEEL, stage_mouseWheel);
			//====================//
			// можно поставить объект напротив наблюдателя по умочанию
			//obj.x = stage.stageWidth * 0.5;
			//obj.y = stage.stageHeight * 0.5;
			//====================//
			// можно поставить наблюдателя напротив объекта
			obj.x = 200;
			obj.y = 200;
			root.transform.perspectiveProjection.projectionCenter = new Point(obj.x, obj.y);
			//====================//
 
		}
 
		private function stage_mouseWheel(e:MouseEvent):void 
		{
			obj.z += 20*e.delta;
		}
 
	}
 
}

Старый 18.02.2014, 11:26
Marlin вне форума Посмотреть профиль Отправить личное сообщение для Marlin Найти все сообщения от Marlin
  № 3  
Ответить с цитированием
Marlin

Регистрация: Feb 2014
Сообщений: 57
то есть если мне нужно "приподнять" все объекты на 2D карте, нужно для каждого объекта перемещать наблюдателя в центр объекта? это нормальная практика? тоесть по сути z- это будет высота объекта на 2d карте, просто нужна высота, для будущего преобразования карты в 3D, а еще вопрос, допустим для масштабирования карты целиком нормально ли использовать этот подход? или лучше скейл

Добавлено через 11 минут
вот переделал ваш код, это нормальный подход или костыли?

Код AS3:
 
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.PerspectiveProjection;
import flash.geom.Point;
 
	public class Main extends Sprite 
	{
		private var obj:Sprite = new Sprite();
		private var obj2:Sprite = new Sprite();
 
 
		public function Main():void 
		{
			obj.graphics.beginFill(0x0080FF);
			obj.graphics.drawCircle(0, 0, 50);
			addChild(obj);
 
			obj2.graphics.beginFill(0x034555);
			obj2.graphics.drawCircle(0, 0, 50);
			addChild(obj2);
			stage.addEventListener(MouseEvent.MOUSE_WHEEL, stage_mouseWheel);
 
			obj.x = 200;
			obj.y = 200;
 
			obj2.x = 400;
			obj2.y = 400;
 
			obj.transform.perspectiveProjection = new PerspectiveProjection();
			obj.transform.perspectiveProjection.projectionCenter = new Point(obj.x, obj.y);
 
 
			obj2.transform.perspectiveProjection = new PerspectiveProjection();
			obj2.transform.perspectiveProjection.projectionCenter = new Point(obj2.x, obj2.y);
 
 
		}
 
		private function stage_mouseWheel(e:MouseEvent):void 
		{
			obj.z += 10 * e.delta;
			obj2.z += 10 * e.delta;
 
		}
 
	}
 
}

Старый 18.02.2014, 11:42
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>нужно для каждого объекта перемещать наблюдателя в центр объекта?
трудно сказать что нужно - есть наблюдатель, есть объекты, от их взаимного расположения зависит проекция на экран.., при этом для разных объектов эта зависимость может быть и разная, ага

>>это нормальная практика?
при наличии сегодня вменяемых 3Д движков типа away3d \ Alternativa, это псевдо-3Д вообще никакая не практика, все настолько невнятно и мутно, что разруливать эту логику нет никакого желания

Старый 19.02.2014, 03:25
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 5  
Ответить с цитированием
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Съезжает он вниз из-за перспективной проекции, отключите перспективу и ни че съезжать не будет, но и растягиваться тоже.

Старый 19.02.2014, 06:32
Marlin вне форума Посмотреть профиль Отправить личное сообщение для Marlin Найти все сообщения от Marlin
  № 6  
Ответить с цитированием
Marlin

Регистрация: Feb 2014
Сообщений: 57
в том то и дело, что нужно чтобы объекты на карте растянулись, но не съезжали, и растянулись все относительно своего центра

Старый 19.02.2014, 06:59
Dukobpa3 вне форума Посмотреть профиль Отправить личное сообщение для Dukobpa3 Найти все сообщения от Dukobpa3
  № 7  
Ответить с цитированием
Dukobpa3
 
Аватар для Dukobpa3

блогер
Регистрация: Oct 2010
Адрес: Киев
Сообщений: 1,678
Записей в блоге: 12
Отправить сообщение для Dukobpa3 с помощью Skype™
Где ноль по х,у - от того места и растягиваются.
Если ноль в лево-верх - понятно что съедут.
__________________
Кто к нам с чем для чего - тот у нас того от того.

Старый 19.02.2014, 12:02
Marlin вне форума Посмотреть профиль Отправить личное сообщение для Marlin Найти все сообщения от Marlin
  № 8  
Ответить с цитированием
Marlin

Регистрация: Feb 2014
Сообщений: 57
так вот, чтобы несколько объектов по оси Z сдвинуть относительно их центров, нужно для каждого объекта точку наблюдателя переназначать? или есть какие-то альтернативные способы?

Старый 19.02.2014, 12:49
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
для такого расклада (наблюдатель всегда напротив) не нужно никакого 3D, посчитать как изменится объект можно из элементарной геометрии
в терминах того же примера это
Код AS3:
package
{
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
	public class Main extends Sprite
	{
		private var obj:Obj = new Obj();
		private var obj2:Obj = new Obj();
 
 
		public function Main():void
		{
 
			addChild(obj);
			addChild(obj2);
 
			stage.addEventListener(MouseEvent.MOUSE_WHEEL, stage_mouseWheel);
 
			obj.x = 200;
			obj.y = 200;
 
			obj2.x = 400;
			obj2.y = 400;
 
		}
 
		private function stage_mouseWheel(e:MouseEvent):void
		{
 
			obj.zPos += 10 * e.delta;
			obj2.zPos += 10 * e.delta;
 
		}
 
	}
 
}
//////////////////////////
import flash.display.Sprite;
 
class Obj extends Sprite
{
	public static var viewDistance:Number = 800;
	private var _zPos:Number=0;
	public function Obj()
	{
		graphics.beginFill(0x0080FF);
		graphics.drawCircle(0, 0, 50);
 
	}
 
	public function get zPos():Number 
	{
		return _zPos;
	}
 
	public function set zPos(value:Number):void 
	{
		_zPos = value;
		scaleX = scaleY = viewDistance / (viewDistance - zPos);
 
	}
 
}

Старый 19.02.2014, 14:40
Marlin вне форума Посмотреть профиль Отправить личное сообщение для Marlin Найти все сообщения от Marlin
  № 10  
Ответить с цитированием
Marlin

Регистрация: Feb 2014
Сообщений: 57
объекты с большой вложенностью, и с фильтрами на разных уровнях, при скейле нужно будет еще пересчитывать все фильтры, а при движении по оси z - фильтры "растягиваются" вместе с объектом", а если учитывать что вся эта карта (со всеми объектами тоже скейлится, и при этом скейле я уже пересчитываю все фильтры) то скейл каждого объекта выглядит вдвойне проблематичней

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

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

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


 


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


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