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

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

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Вращение 3д экранного объекта из точки регистрации в центре

Собственно создаю 3д объект типа шейп допустим куб ( из линий только ) . Добавляю на сцену, естственно он имеет координаты 0,0,0 .
Следующим шагом как показывает хелп нужно доабвить z координату. Делаем. Ну и с помощью 3дматрицы пробуем вставить точку в центр и крутить вокруг нее, как описано в хелпе

Из хелпа
Код AS3:
myObject.z = 1; 
    myObject.transform.matrix3D.appendTranslation(10,10,0);
    myObject.transform.matrix3D.appendRotation(1, Vector3D.YAXIS);
    myObject.transform.matrix3D.appendTranslation(-10,-10,0);
Но у меня происходят странные метаморфозы, объект начинает хаотично менять направление и вести себя странно ))

Код AS3:
cont.z = 1   ( допустим 100*100*100 размеры )
 
cont.addEventListener ( Event.ENTER_FRAME , onFrame);
 
private function onFrame(e:Event):void 
		{
 
			cont.transform.matrix3D.appendTranslation(100,100,100);
			cont.transform.matrix3D.appendRotation(0.05, Vector3D.Y_AXIS);
			cont.transform.matrix3D.appendTranslation(-100,-100, -100);
		}
Что я делаю не так ?

Старый 16.02.2011, 11:33
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Дайте весь код. Иначе непонятно, что Вы подразумеваете под "точка регистрации в центре", почему смещаете на 100, каков размер сцены и, главное, где начало координат Вашего кубика, вокруг которого он крутится. Я так понимаю что он не в центре куба, а в левой верхней передней (или задней?) вершине.
__________________
Reality.getBounds(this);

Старый 16.02.2011, 13:43
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
@Wolsh ну я же написал. точка регистрации после создания находится в 0-0-0. А мне нужно поместить в центр фигуры, представьте сферу точка пересечения окружностей ( диаметров ) в цеентре вообщем. ВОт туда и надо поместить точку и крутить вокруг нее. Размер сцены тут не причем, размер шейпа 100*100*100 например, это я тоже сказал.

Цитата:
Я так понимаю что он не в центре куба, а в левой верхней передней (или задней?) вершине.
Левый верхний да, логично. А нужно в центр по 3м осям

Старый 16.02.2011, 16:04
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Размер сцены причем. В ее центре находится глаз наблюдателя.
Размер куба 100х100х100. Смещаясь на 100 для поворота - чего Вы хотели добиться? Центра?
__________________
Reality.getBounds(this);

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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Извиняюсь не корректно написал ошибочка. Исправил ( но неверно я написал лишь на форуме, а не у себя, поэтому вопрос висит ). Размер сцены скажем 800*600 пускай раз причем

Код AS3:
cont.transform.matrix3D.appendTranslation(100/2,100/2,100/2);
			cont.transform.matrix3D.appendRotation(0.05, Vector3D.Y_AXIS);
			cont.transform.matrix3D.appendTranslation(-100/2,-100/2, -100/2);

Старый 16.02.2011, 16:19
gr_crd вне форума Посмотреть профиль Отправить личное сообщение для gr_crd Посетить домашнюю страницу gr_crd Найти все сообщения от gr_crd
  № 6  
Ответить с цитированием
gr_crd
 
Аватар для gr_crd

Регистрация: Mar 2009
Адрес: Kazakhstan, Almaty
Сообщений: 121
добавляем в контейнер стороны куба
Код AS3:
cube = new Sprite;
 
addChild(cube);
for (i = 0; i < stc; i++) {
    cube.addChild(stors[i]);
}
размещаем их таким образом
Код AS3:
stors[0].x = 0; stors[0].y = 0; stors[0].z = -50; stors[0].rotationZ = 0;
stors[1].x = 0; stors[1].y = 0; stors[1].z = 50; stors[1].rotationZ = 0;
stors[2].x = 50; stors[2].y = 0; stors[2].z = 0; stors[2].rotationY = 90;
stors[3].x = -50; stors[3].y = 0; stors[3].z = 0; stors[3].rotationY = 90;
stors[4].x = 0; stors[4].y = 50; stors[4].z = 0; stors[4].rotationX = 90;
stors[5].x = 0; stors[5].y = -50; stors[5].z = 0; stors[5].rotationX = 90;
смещаем в начало координат, поворачиваем, возвращаем
Код AS3:
matrixCube.appendTranslation(-pos.x, -pos.y, -pos.z);
matrixCube.appendRotation(0.7, vect2);
matrixCube.appendTranslation(pos.x, pos.y, pos.z);
вращение происходит вокруг цента куба.

выглядит так: во вложении.
Вложения
Тип файла: zip 3d_eng_2.zip (9.5 Кб, 57 просмотров)
__________________
заткнись и делай


Последний раз редактировалось gr_crd; 16.02.2011 в 16:22.
Старый 16.02.2011, 16:49
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
gr_crd а почему так сложно то? Разве нет варианта более рационального с использованием матриц ?

Да и тем более не понятно начало :

cube это наша фигура. ок

stc количество углов-вершин, как я понимаю. ок

Код AS3:
 cube.addChild(stors[i]); // а вот тут ваще не понятно, че за stors и где он объявлен
И почему их 6 всего а не 8 ))

Как то все странно.
Попробую рассказать предисторию создания.
Я создаю шейп из линий ( сетка ) горизонтальные и вертикальные линии, обычный mash как в любом 3д редакторе.
Затем в цикле
1. Создаю дубликаты сетки и смещаю их по z ( на желаемое расстояние друг от друга )
2. Создаю дубликаты сетки, поворачиваю на 90 градусов (RotationX вроде) и смещаю по y ( тут уже по z смещать не надо, при повороте он сам преобретает z координату)
В итоге получается псевдо-куб с эффектом x-Ray , так сказать.

Добавляю его на сцену ( ширина и высота = размерам сцены ) , а по z = высоте сцены.

Все теперь мы видим куб из линий который закрывает всю область сцены, фронтальной смотрит на нас. При добавлении он добавляется на координату 0-0-0 соотв, я так думаю.

Затем я ему даю z = 1 ; И пробую работать с матрицами как я описал ( соотв вместо 100 там другие размеры от сцены )

Старый 16.02.2011, 17:04
gr_crd вне форума Посмотреть профиль Отправить личное сообщение для gr_crd Посетить домашнюю страницу gr_crd Найти все сообщения от gr_crd
  № 8  
Ответить с цитированием
gr_crd
 
Аватар для gr_crd

Регистрация: Mar 2009
Адрес: Kazakhstan, Almaty
Сообщений: 121
Цитата:
gr_crd а почему так сложно то
ну, это самое простое, по-моему.

stors - массив шейпов (сторон куба)

Цитата:
И почему их 6 всего а не 8 ))
потомучто у куба 6 сторон.

Цитата:
Как то все странно.
ну незнаю, куб крутится вокруг своего центра, как и нужно было.

ps. а вообще, удобнее отображать 3d-объекты с помощью drawTriangles() || lineTo(). правда придется немного почитать.
__________________
заткнись и делай


Последний раз редактировалось gr_crd; 16.02.2011 в 17:07.
Старый 16.02.2011, 17:17
proxiServer вне форума Посмотреть профиль Отправить личное сообщение для proxiServer Найти все сообщения от proxiServer
  № 9  
Ответить с цитированием
proxiServer
 
Аватар для proxiServer

Регистрация: Jun 2006
Сообщений: 400
gr_crd, а можно исходник?) оч круто)

Старый 16.02.2011, 17:27
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 10  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
потомучто у куба 6 сторон.
Я думал разговор идет о вершинах.

proxiServer - если тебе такое надо используй обычный away3d или alternativa3d напимер. Там это делается за считанные секунды с любой графикой

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

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

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


 


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


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