Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 07.11.2006, 01:23   #16
Diplomat
Дэвелопер
 
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений
(для 164 пользователей)
Re: Как узнать размер меша?

Господа, особенно Джимон, пожалуйста! Релятивистский флуд на тему "...А вот у нас на Колыме МД2- это меш..." неконструктивен, да ко всему является еще и оффтопом.

...

По САБЖ-у: ИМХО, размеры любого обьекта можно узнать в редакторе перед экспортом, вручную записать их в файл, а потом считать из файла в Блице.
Более того: таким образом можно хранить намного больше данных об обьекте, чем предоставляют средства как Блица, так и мифического Иррлича.
(Offline)
 
Ответить с цитированием
Старый 07.11.2006, 09:05   #17
jimon
 
Сообщений: n/a
Re: Как узнать размер меша?

AABBOX
ето воображаемая коробка по осям
она обычно применяется для быстрых колизий

т.е. ето бокс в которую меш вписывается
но грани етого бокса паралельны осям
 
Ответить с цитированием
Старый 08.11.2006, 02:04   #18
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Как узнать размер меша?

C моей точки зреня ЕТО:

Сообщение от jimon
untonee

потом X_dist = abs(X_min) + abs(X_max) и тд
и получаем то что надо
работать не будет.
пример X_min=2; X_max=6 (width=4, вроде понятно как считать ). короче X_dist=X_max-X_min. для отрицательных X понятно что будет работать и Jimon-овский вариант.

Теперь по AABBOX. Как я понял, ето задается программно, и как с помощью етого определить размер объекта . А мне между прочим тоже интересно, можно как-нить узнать размер объекта (помимо mesh-a), программным способом (не чтением из файла)
(Offline)
 
Ответить с цитированием
Старый 08.11.2006, 09:02   #19
jimon
 
Сообщений: n/a
Re: Как узнать размер меша?

http://www.gamedev.ru/terms/AABB

AABB (ну иногда называется aabbox в некоторых двигах)
оно задается именно ентити
если ентити не вращать - тоесть углы 0,0,0
то получаем что высота,ширина и длина етого AABB
являются также высотой,шириной и длиной меша етого ентити

да кстати
вот тут коечто есть
http://gamemaker.webservis.ru/articles/engine/d8.htm
 
Ответить с цитированием
Старый 26.05.2007, 13:44   #20
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Как узнать размер меша?

а как узнать размер AnimMesh ? MeshWidth,MeshHeight, MeshDepth Эти функций возвращают -120 000. И еще почему EntityPickMode mode,2 не работает для АнимМесш?
(Offline)
 
Ответить с цитированием
Старый 26.05.2007, 15:06   #21
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Как узнать размер меша?

уже не раз обсуждалась проблема аниммешов, ето не один объект, а несколько пипарентенных к ентити хендл которого и представляет хендл аниммеша.
надо пользоваться рекурсией чтобы можно было принимать текстуру, цвет, альфу, режим "пиканься" и т.д.
размер аниммеша можно узнать так, находим максимальное иминимальное значение вертексов каждого чайлда, прибавляем к етому смещение относительно родителя и находим таким образом максималные и минимальные координаты по каждой из трех осей, потом из максимальных вычитаем минимальную и полуцчаем размер по какой-либо из оси.
(Offline)
 
Ответить с цитированием
Старый 26.05.2007, 15:10   #22
Platon
Знающий
 
Регистрация: 04.08.2006
Адрес: Россия
Сообщений: 297
Написано 39 полезных сообщений
(для 70 пользователей)
Re: Как узнать размер меша?

надо пользоваться рекурсией
2WaReZ_MEN
Вот так примерно:
Function AnimEntityPickMode(Mesh, Mode)
   For i = 0 To (CountChildrens(Mesh) - 1)
      Child = GetChild(Mesh, i)
      AnimEntityPickMode(Child, Mode)
      EntityPickMode(Child, Mode)
   Next
End Function
(Offline)
 
Ответить с цитированием
Старый 26.05.2007, 15:14   #23
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Как узнать размер меша?

HolyDel я написал вот такое ну она почемуто не работает типа переполнение памяти говорит.
Function AnimEntityWidth#(aent)
Local ent,rez#
rez#=MeshWidth(aent)
For c=1 To CountChildren(aent)
 ent=GetChild(aent,c)
 If CountChildren(ent)>0
 AnimEntityWidth#(ent)
 Else
 rez#=MeshWidth(ent) 
 EndIf
Next
Return rez#
End Function
 
Function AnimEntityHeight#(aent)
Local ent,rez#
rez#=MeshHeight(aent)
For c=1 To CountChildren(aent)
 ent=GetChild(aent,c)
 If CountChildren(ent)>0
 AnimEntityHeight#(ent)
 Else
 rez#=MeshHeight(ent) 
 EndIf
Next
Return rez#
End Function
 
Function AnimEntityDepth#(aent)
Local ent,rez#
rez#=MeshDepth(aent)
For c=1 To CountChildren(aent)
 ent=GetChild(aent,c)
 If CountChildren(ent)>0
 AnimEntityDepth#(ent)
 Else
 rez#=MeshDepth(ent) 
 EndIf
Next
Return rez#
End Function
(Offline)
 
Ответить с цитированием
Старый 26.05.2007, 22:02   #24
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Как узнать размер меша?

stack overflow?
вот алгоритм находи ВСЕ чилды нужног нам аниментити.
переираем все его чилды и находим левую и правую границу.
Вот, я написал кртину чтоб было понятнее.
http://likosoft.ucoz.ru/ameshsize.PNG

вот код, только идея, на работоспособность не проверял.
ПС. етот ентити должен быть неотскален.
Type childent
	Field ent
End Type

Function AnimMeshWidth(ent)
	GetAllChilds(ent)
	For ce.childent=Each childent
		If ce=First childent
			
			minx=EntityX(ce\ent)-MeshWidth(ce\ent)
			maxx=EntityX(ce\ent)+MeshWidth(ce\ent)
			Else
			
			If minx>EntityX(ce\ent)-MeshWidth(ce\ent) Then minx=EntityX(ce\ent)-MeshWidth(ce\ent)
			If maxx<EntityX(ce\ent)+MeshWidth(ce\ent) Then maxx=EntityX(ce\ent)+MeshWidth(ce\ent)			
		EndIf
	Next
	Delete Each childent
	Return maxx-minx
End Function

Function GetAllChilds(ent)
		For i=1 To CountChildren(ent)
			If CountChildren(ent)>0
				GetAllChilds(ent)
			Else
				ce.childent=New childent
				ce\ent=ent
			EndIf
		Next
End Function
(Offline)
 
Ответить с цитированием
Старый 27.05.2007, 12:18   #25
Render
Знающий
 
Регистрация: 12.07.2006
Сообщений: 283
Написано 16 полезных сообщений
(для 32 пользователей)
Re: Как узнать размер меша?

Вот как я определяю размеры тел из макса с учётом скейла

Пример для кубика

dimens_x# = MeshWidth #(child)*0.5*EntityScaleX#(child)
dimens_y# = MeshHeight #(child)*0.5*EntityScaleY#(child)
dimens_z# = MeshDepth#(child)*0.5*EntityScaleZ#(child)

Function EntityScaleX#(ent%) 
 row=0
 el1# = GetMatElement(ent,row,0) 
 el2# = GetMatElement(ent,row,1) 
 el3# = GetMatElement(ent,row,2) 
 Return Sqr(el1*el1+el2*el2+el3*el3) 
End Function

Function EntityScaleY#(ent%) 
 row=1
 el1# = GetMatElement(ent,row,0) 
 el2# = GetMatElement(ent,row,1) 
 el3# = GetMatElement(ent,row,2) 
 Return Sqr(el1*el1+el2*el2+el3*el3) 
End Function

Function EntityScaleZ#(ent%) 
 row=2
 el1# = GetMatElement(ent,row,0) 
 el2# = GetMatElement(ent,row,1) 
 el3# = GetMatElement(ent,row,2) 
 Return Sqr(el1*el1+el2*el2+el3*el3) 
End Function
0.5 - потому что размер примитивов в 3дМаксе в 2 раза больше блитцевских.
(Offline)
 
Ответить с цитированием
Старый 27.05.2007, 16:19   #26
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Как узнать размер меша?

ДА обычный меш то легко моно тросто размер умновжить на процент скалинга и бедет тебе счастье... Меня то Анемированые меши интересуют...
(Offline)
 
Ответить с цитированием
Старый 28.05.2007, 01:49   #27
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Как узнать размер меша?

Cyan не работает
Function AnimEntityPickMode(Mesh, Mode)
   EntityPickMode(Mesh, Mode)
   For i = 1 To (CountChildren(Mesh))
      Child = GetChild(Mesh, i)
      If CountChildren(Child)>0
         AnimEntityPickMode(Child, Mode)
      Else EntityPickMode(Child, Mode)
      EndIf
   Next
End Function
(Offline)
 
Ответить с цитированием
Старый 28.05.2007, 02:01   #28
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Как узнать размер меша?

вроде должноработать, попробуй так:
Function AnimEntityPickMode(Mesh, Mode)
   EntityPickMode(Mesh, Mode)
   For i = 1 To (CountChildren(Mesh))
      Child = GetChild(Mesh, i)
      AnimEntityPickMode(Child, Mode)
   Next
End Function
(Offline)
 
Ответить с цитированием
Старый 28.05.2007, 02:03   #29
WaReZ_MEN
Модератор
 
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений
(для 44 пользователей)
Re: Как узнать размер меша?

не работает
(Offline)
 
Ответить с цитированием
Старый 28.05.2007, 02:10   #30
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Как узнать размер меша?

а ты с какими цифрами вызываеш?
надеюсь с 2, а то в противных случаях придеться еще и радиус или коробку задавать.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать размер файла HAMANN 2D-программирование 3 16.12.2008 18:12
Размер мидлета archerix Основной форум 10 12.02.2008 16:37
Размер массива kyb66 Основной форум 7 15.12.2007 21:32


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com