Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Задание rotationY рушит мой PerspectiveProjection (http://www.flasher.ru/forum/showthread.php?t=161448)

AL.exe 24.07.2011 17:51

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

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

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

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

Плеер десятый.

silin 24.07.2011 22:09

только предположение: perspectiveProjection не сбрасывается ( с чего бы ?), но в силу того при повороте контейнера дети тоже поворачиваются (относительно точки регистрации контейнера) видим нечто, возможно и странное..
внятный пример бы, чтоб не фантазировать

AL.exe 25.07.2011 14:42

Вложений: 1
Прикрепил пример в fla, там в коде нужно расскомментировать одну строку, чтобы увидеть проблему (см. комментарии в коде).

Для меня поведение действительно загадочно :(

silin 25.07.2011 14:48

нет CS5, не могу посмотреть

AL.exe 25.07.2011 15:05

Ну, там приложен 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, могу пересохранить для него.

silin 25.07.2011 15:09

>>могу пересохранить для него
ну да

AL.exe 25.07.2011 15:12

Вложений: 1
Вот для cs4.

Чтобы увидеть проблему нужно еще поресайзить окно по горизонтали.

silin 25.07.2011 16:22

не удается до конца вкурить логику адобов с этим 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;
}


AL.exe 26.07.2011 20:08

Ого, сам я на матрицу 3д-трансформации даже не додумался посомтреть. Все-таки как-то неявно они это сделали.

Спасибо огромное, Silin, ты мой спаситель :)


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

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