|
3D-программирование Вопросы, касающиеся программирования 3D мира |
07.11.2006, 01:23
|
#16
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: Как узнать размер меша?
Господа, особенно Джимон, пожалуйста! Релятивистский флуд на тему "...А вот у нас на Колыме МД2- это меш..." неконструктивен, да ко всему является еще и оффтопом.
...
По САБЖ-у: ИМХО, размеры любого обьекта можно узнать в редакторе перед экспортом, вручную записать их в файл, а потом считать из файла в Блице.
Более того: таким образом можно хранить намного больше данных об обьекте, чем предоставляют средства как Блица, так и мифического Иррлича.
|
(Offline)
|
|
07.11.2006, 09:05
|
#17
|
|
Re: Как узнать размер меша?
AABBOX
ето воображаемая коробка по осям
она обычно применяется для быстрых колизий
т.е. ето бокс в которую меш вписывается
но грани етого бокса паралельны осям
|
|
|
08.11.2006, 02:04
|
#18
|
☭
Регистрация: 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)
|
|
26.05.2007, 13:44
|
#20
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Re: Как узнать размер меша?
а как узнать размер AnimMesh ? MeshWidth,MeshHeight, MeshDepth Эти функций возвращают -120 000. И еще почему EntityPickMode mode,2 не работает для АнимМесш?
|
(Offline)
|
|
26.05.2007, 15:06
|
#21
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Как узнать размер меша?
уже не раз обсуждалась проблема аниммешов, ето не один объект, а несколько пипарентенных к ентити хендл которого и представляет хендл аниммеша.
надо пользоваться рекурсией чтобы можно было принимать текстуру, цвет, альфу, режим "пиканься" и т.д.
размер аниммеша можно узнать так, находим максимальное иминимальное значение вертексов каждого чайлда, прибавляем к етому смещение относительно родителя и находим таким образом максималные и минимальные координаты по каждой из трех осей, потом из максимальных вычитаем минимальную и полуцчаем размер по какой-либо из оси.
|
(Offline)
|
|
26.05.2007, 15:10
|
#22
|
Знающий
Регистрация: 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
|
Модератор
Регистрация: 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
|
☭
Регистрация: 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
|
Знающий
Регистрация: 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
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Re: Как узнать размер меша?
ДА обычный меш то легко моно тросто размер умновжить на процент скалинга и бедет тебе счастье... Меня то Анемированые меши интересуют...
|
(Offline)
|
|
28.05.2007, 01:49
|
#27
|
Модератор
Регистрация: 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
|
☭
Регистрация: 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
|
Модератор
Регистрация: 20.06.2006
Сообщений: 363
Написано 24 полезных сообщений (для 44 пользователей)
|
Re: Как узнать размер меша?
не работает
|
(Offline)
|
|
28.05.2007, 02:10
|
#30
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Как узнать размер меша?
а ты с какими цифрами вызываеш?
надеюсь с 2, а то в противных случаях придеться еще и радиус или коробку задавать.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:02.
|