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

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

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

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Attention Задание rotationY рушит мой PerspectiveProjection

Проблема в следующем. Есть спрайт, внутри которого несколько спрайтов с разными значениями rotationY/X. Сделан в IDE.

Флешка резиновая, а спрайт должен центрироваться, поэтому я повесил на сам спрайт PerspectiveProjection с нужным мне ванишинг поинтом и углом перспективы (я так понимаю, тогда перспектива для всего спрайта начинает рассчитываться отдельно, т.е. не как у других спрайтов на сцене, которым не задавали перспективу через as) и спокойно его центрирую по ресайзу.

Проблема в следующем - как только я меняю у спрайта свойство rotationY на любое значение (даже на то, которое уже и так стоит - для спрайта оно равно нулю, но это не так важно), то со спрайтом происходит что-то странное. Похоже на то, что перспектива для него сбрасывается на ту, что задана по умолчанию для всей флешки.

Подскажите, как быть, пожалуйста. Желательно без использования внешних библиотек для 3д.

Плеер десятый.
__________________
Дело не в тебе

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

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

Старый 25.07.2011, 14:42
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 3  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Прикрепил пример в fla, там в коде нужно расскомментировать одну строку, чтобы увидеть проблему (см. комментарии в коде).

Для меня поведение действительно загадочно
Вложения
Тип файла: zip projection_example.zip (47.4 Кб, 24 просмотров)
__________________
Дело не в тебе

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
нет CS5, не могу посмотреть

Старый 25.07.2011, 15:05
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 5  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Ну, там приложен swf, чтобы можно было представить, как выглядит.

Код в кадре там вот такой лежит:
Код AS3:
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
 
stage.addEventListener(Event.RESIZE, this.stageResizeHandler)
 
 
//задаем нужную 3д проекцию контенту страницы
var projection:PerspectiveProjection=new PerspectiveProjection();
projection.projectionCenter = new Point(100,100);
projection.fieldOfView = 55
this.content.transform.perspectiveProjection = null
this.content.transform.perspectiveProjection = projection;
 
 
function stageResizeHandler(event : Event) : void
{
	this.content.x = this.stage.stageWidth/2
}
 
 
trace(this.content.rotationY) // выдаст 0
//расскомментируйте эту строку, чтобы увидеть проблему
//this.content.rotationY=0
content - это контейнер, внутри которого находятся все текстфилды, повернутые друг другу под углом.

Если есть cs4, могу пересохранить для него.
__________________
Дело не в тебе

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

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

Старый 25.07.2011, 15:12
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 7  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Вот для cs4.

Чтобы увидеть проблему нужно еще поресайзить окно по горизонтали.
Вложения
Тип файла: zip projection_cs4.zip (70.0 Кб, 17 просмотров)
__________________
Дело не в тебе

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

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
не удается до конца вкурить логику адобов с этим 3Д,
такое вот есть предположение:
без определения какого-нибудь из "3Д-шных" свойств (rotationY в этом случае) matrix3D объекта не определена, и определение perspectiveProjection не имеет смысла, т.е. ситуация как раз обратная: после определения rotationY perspectiveProjection не сбрасывается в состояние родителя (stage), а наоборот начинает работать

а 'ерзает' при ресайзе из-за того, что координаты объекта меняются, а вьюпойнт нет
если менять и его тоже, то вроде бы все адекватно
Код AS3:
var projection:PerspectiveProjection = new PerspectiveProjection();
projection.projectionCenter=new Point(content.x,content.y);
projection.fieldOfView=55;
content.transform.perspectiveProjection=projection;
 
trace( "content.transform.matrix3D : " + content.transform.matrix3D );
// после этого matrix3D определена,  без нее perspectiveProjection возможно в пустоту
this.content.rotationY = 0;
trace( "content.transform.matrix3D : " + content.transform.matrix3D );
 
 
function stageResizeHandler(event : Event):void {
	content.x=stage.stageWidth/2;
	// при изменении размеров сцены и вьюПойнт должна ездить
	var projection:PerspectiveProjection = new PerspectiveProjection();
	projection.projectionCenter=new Point(content.x,content.y);
	content.transform.perspectiveProjection=projection;
}

Старый 26.07.2011, 20:08
AL.exe вне форума Посмотреть профиль Отправить личное сообщение для AL.exe Посетить домашнюю страницу AL.exe Найти все сообщения от AL.exe
  № 9  
Ответить с цитированием
AL.exe
 
Аватар для AL.exe

Регистрация: Jan 2004
Адрес: Net
Сообщений: 1,049
Отправить сообщение для AL.exe с помощью ICQ
Ого, сам я на матрицу 3д-трансформации даже не додумался посомтреть. Все-таки как-то неявно они это сделали.

Спасибо огромное, Silin, ты мой спаситель
__________________
Дело не в тебе

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

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

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


 


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


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