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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.01.2012, 15:00
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 11  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Это типа комнаты
Пол всегда есть
Крыши может и не быть
У меня приходит набор точек, по которым я рисую на грани bottom фигуру (пол)
Затем, если нужно, отрисовываю крышу, причем, на полу и на крыше может лежать текстура (Bitmap)
К примеру "комната" на скрине

expl, был бы признателен, если бы Вы показали исходники BSP-деревьев
Изображения
 

Старый 09.01.2012, 15:45
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 12  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Да, для комнаты bsp должно быть оптимальным вариантом, там же надо нет движущихся частей - один раз разбил на дерево и все.

bsp_sources.zip
Суть такая:
- дерево перестраивается на каждом кадре. Вам достаточно его построить один раз. Оно и в моем примере не нужно, просто планы были наполеоновскими
- написано на haXe. Не производительности ради, а просто язык мне нравится. Если портируете на as3 - производительность сильно упасть не должна (ну в 2 раза из-за отсутствия inline - это потолок, т.е. можно не обращать внимания).

Голос разума говорит, что надо использовать обкатанные движки типа alternativa.
(Единственное, они код закрыли и требуют свой значёк впихивать, но, наверно есть и открытые либы с BSP-деревом. Наверно)

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Спасибо, попробую разобраться
У меня условие - все должно быть нарисовано нативными средствами флэша, так что движки отпадают сразу

Старый 09.01.2012, 17:01
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 14  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Странное условие, если это не тестовое задание. Ибо чем самопальный код должен быть лучше обкатанного.
По сути:
у меня там треугольники режутся. Для случая комнаты (наверно) будет лучше резать стены не произвольными плоскостями, а плоскостями, перпендикуляными полу. Таким образом будет проще разрезать прямогольную стенку на 2 тоже прямоугольных. Плюс добавить 2 режущие плоскости, чтобы одна совпадала с потолком, другая - с полом и таким образом правильно отобразить потолок и пол.

Для начала можно, конечно порезать прямоугольники на 2 треугольника и посмотреть что получится впринципе (даже пока не портируя на as3). Потом попробовать отрисовать эти треугольники с учётом перспективы (api flashplayer 10 позволяет). А потом уже попробовать использовать прямоугьльники и жонглировать порядком отображения этих спрайтов, а не просто рисовать по порядку фигуры.


Последний раз редактировалось expl; 09.01.2012 в 17:07.
Старый 09.01.2012, 18:25
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 15  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от expl Посмотреть сообщение
Странное условие, если это не тестовое задание. Ибо чем самопальный код должен быть лучше обкатанного.
Есть отрендеренная картинка этажа здания
На нее нужно наложить этот 3д мир с комнатами, стенами
Координаты стен и комнат (по сути, точки) приходят в данных
Затем нужно эту всю огромную конструкцию таскать мышкой (вместе с бэкграундом-картинкой этажа)
В Альтернативе я застопорился на ограниченности размера 3д сцены (или View, не помню уже) по ширине и высоте

-------------------------------------------------------------

Вроде получилось без BSP дерева
Но иногда при вращении сортировка все равно ошибается
Я вытащил все грани из контейнера и напрямую кладу их в спрайт, который кручу в 3Д

Код AS3:
public static function sort(container3D:Sprite, figures:Vector.<*>):void
		{
			var observerPos:Vector3D=new Vector3D();
			var vo : SortVO;
			var index:int = 0;
 
			observerPos.x=container3D.transform.perspectiveProjection.projectionCenter.x;
			observerPos.y=container3D.transform.perspectiveProjection.projectionCenter.y;
			observerPos.z=-container3D.transform.perspectiveProjection.focalLength;
 
			trace("\nobserverPos "+observerPos);
 
			var faces:Vector.<Plane>=new Vector.<Plane>();
			var distArray:Array=new Array();
 
			for(var i:int=0;i<figures.length;i++)
			{
				if(figures[i] is NAnglePrimitive)
				{
					var currFigure:NAnglePrimitive=figures[i] as NAnglePrimitive;
					for(var j:int=0;j<currFigure.faces.length;j++)
					{
						faces.push(currFigure.faces[j]);
					}
				}
				else if(figures[i] is Plane)
				{
					faces.push(figures[i] as Plane);
				}
			}
 
			var totalFaces:int=faces.length;
			for(i=0;i<totalFaces;i++)
			{
				var currFace:Plane=faces[i];
 
				var mtrx:Matrix3D = container3D.transform.getRelativeMatrix3D(currFace);
				mtrx.invert();
				var curMid:Vector3D = mtrx.position;
 
				// середина 3д спрайта относительно спрайта, который крутится в 3Д
				curMid = Utils3D.projectVector(currFace.centerSprite.transform.getRelativeMatrix3D(container3D.parent), new Vector3D());
 
				// дистанция от середины 3д спрайта до точки обзора в 3д (трансформируется контейнер а не stage или root)
				var curDist:Number=Math.sqrt(Math.pow(curMid.x-observerPos.x,2)+Math.pow(curMid.y-observerPos.y,2)+Math.pow(curMid.z-observerPos.z,2));
 
				trace("face "+currFace.id+" MID "+curMid+" distance "+curDist);
				var sortVO:SortVO=new SortVO();
				sortVO.object=currFace;
				sortVO.observerPointDistance=curDist;
				distArray.push(sortVO);
			}
			distArray.sortOn("observerPointDistance", Array.NUMERIC | Array.DESCENDING);
 
			for each(vo in distArray)
			{
				container3D.setChildIndex(vo.object, index++);
			}
 
			trace("самая близкая грань "+distArray[0].object.id);
		}
Изображения
 


Последний раз редактировалось djyamato; 09.01.2012 в 20:00.
Старый 16.01.2012, 03:54
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 16  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Нет
Все таки сильно лагает механизм и чтобы не создавать еще одну тему я "апну" эту, извините

вот я разбил отрезки друг другом и "продолжалками" (на скрине)
как дальше BSP дерево сформировать
Или я вообще не правильно понял идею ?
Изображения
 

Старый 16.01.2012, 04:01
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 17  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Вопрос про BSP в 2D?
Выбираем отрезок. Этот отрезок делит остальные отрезки на две группы - одна рендерится до него, другая после него. В этих группах тоже выбираем по отрезку и делим и т.д. http://www.gamedev.ru/code/articles/BSP
Ещё раз скажу про движки, негоже таким страдать %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Цитата:
Сообщение от -De- Посмотреть сообщение
Вопрос про BSP в 2D?
Ну, я расчитывал хоть как-то упростить себе задачу поэтому разбивал в 2D

Старый 16.01.2012, 12:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 19  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
В вашем случае с комнатой в 2d разбить как раз будет эффективнее.

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

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

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


 


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


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