![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2005
Сообщений: 50
|
Помогайте, кто чем может )
На сцене есть 2 контейнера (ObjectContainer). objectContainer1 и objectContainer2 В objectContainer1 есть объект plane. Задача - перенести объект plane из objectContainer1 в objectContainer2, но так, чтобы положение и поворот plane остались неизменными. т.е., чтобы plane не изменил своего положения. Нужно это для последующей анимации plane в objectContainer2, т.е. чтобы plane плавно переместился из заданной позиции objectContainer1 в заданную позицию objectContainer2 Есть 2 решения: Решение 1: 1. Получить глобальные координаты (coords1) plane пока он находится в objectContainer1 2. Перенести plane в objectContainer2 3. Получить глобальные координаты (coords2) plane пока он находится в objectContainer2 4. Удалить plane из objectContainer2 5. Анимировать plane из coords1 в coords2 6. Перенести plane в objectContainer2 Это решение реализуемо, но не годится, т.к. нужно, чтобы plane сразу стал объектом в objectContainer2 Решение 2: 1. Перенести plane в objectContainer2, но так, чтобы plane остался в предыдущей позиции (Вот тут вся загвоздка) 2. Анимировать plane в objectContainer2 P.S. Вывести plane из objectContainer1 так, чтобы plane оставался на месте я могу. Примерно так: var rot = Matrix3D.matrix2euler(plane.sceneTransform); var pos = plane.scenePosition; objectContainer1.removeChild(plane); scene.addChild(plane); plane.x = pos.x; plane.y = pos.y; plane.z = pos.z; plane.rotationX = rot.x; plane.rotationY = rot.y; plane.rotationZ = rot.z; Как прицепить его к objectContainer2, чтобы он оставался в этой же позиции неясно ( В общем нужно по известному глобальному (x,y,z и rotX, rotY, rotZ) для objectContainer2 и глобальному (x,y,z и rotX, rotY, rotZ) для plane получить локальные (x,y,z и rotX, rotY, rotZ) для plane в objectContainer2 P.P.S Спасибо за внимание Последний раз редактировалось nauroman; 27.08.2007 в 11:18. |
|
|||||
|
Регистрация: May 2007
Сообщений: 116
|
если нужно оставить координаты неизменными, относительно сцены, то пользуй localTOGLobal и globalToLocal.
А вообще можно так еще ( набросок ) Если plain лежит в либе. Аттачишь plain в ObjectContainer2 потом что то типа этого, goto Flash8 Help если что |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 50
|
Я говорю про away3d, про :
plane.x plane.y plane.z plane.rotationX plane.rotationY plane.rotationZ т.е. речь идёт о 3d координатах, и AS3 ) |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
nauroman, отредактируйте свой пост и оформите код тегами [code][/code].
|
|
|||||
|
Регистрация: Sep 2005
Сообщений: 50
|
РАБОТАЕТ. Спасибо большое.
В результете выглядит примерно так: ...
public class AnimObjectContainer3D extends ObjectContainer3D
{
public function AnimObjectContainer3D(init:Object = null)
{
super(init);
}
override public function addChild(param_child:Object3D):void
{
if (param_child.parent != null)
{
var prevTransform = Matrix3D.multiply(param_child.parent.transform, param_child.transform);
}
super.addChild(param_child);
if (prevTransform != null)
{
param_child.transform = Matrix3D.multiply(Matrix3D.inverse(transform), prevTransform);
}
...
|
|
|||||
|
Регистрация: Sep 2005
Сообщений: 50
|
Хотя нет, вру. Не работает.
т.е. после ...
public class AnimObjectContainer3D extends ObjectContainer3D
{
public function AnimObjectContainer3D(init:Object = null)
{
super(init);
}
override public function addChild(param_child:Object3D):void
{
if (param_child.parent != null)
{
var prevTransform = Matrix3D.multiply(param_child.parent.transform, param_child.transform);
}
super.addChild(param_child);
if (prevTransform != null)
{
param_child.transform = Matrix3D.multiply(Matrix3D.inverse(transform), prevTransform);
}
...
param_child.rotationX = param_child.rotationX; param_child.rotationY = param_child.rotationY; param_child.rotationZ = param_child.rotationZ; не помогает |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|