|
3D-программирование Вопросы, касающиеся программирования 3D мира |
21.02.2014, 09:02
|
#1
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Проверка нахождения объекта внутри другого
Нужно проверить находится ли объект внутри ограничительного бокса. Не как не могу понять как это сделать.
Проверять по радиусу от центра бокса не получится, ведь это не сфера. На булке ничего подходящего не нашёл. Использовать типо MeshWidth, MeshHeight, MeshDepth? Скорость выполнения неважна, т. к. не для реал тайма.
Прошу помочь с алгоритмом, спасибо.
|
(Offline)
|
|
21.02.2014, 09:10
|
#2
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: Проверка нахождения объекта внутри другого
Есть такой код от H@NON вроде. Типа система тригеров.
|
(Offline)
|
|
21.02.2014, 12:25
|
#3
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Проверка нахождения объекта внутри другого
ну чего тут думать то
Если Х искомой точки больше min X бокса и меньше max X бокса, значит точка в боксе по оси Х. Такие же проверки по YZ. Это для AABB.
Если бокс ротированный (OBB), то надо сначала умножить точку на инверсию его ротации (матрицу, кватернион), чтобы привести её в пространство бокса а дальше проверять так же как с AABB.
Если надо проверить нахождение в боксе не точки а другого бокса, то проверяешь все точки этого другого бокса. Или там даже все точки меша, если совсем точно надо.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.02.2014, 15:29
|
#4
|
Дэвелопер
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений (для 1,540 пользователей)
|
Ответ: Проверка нахождения объекта внутри другого
Для AABB
Function IsPointInsideAABB%( point, box )
; point - объект
; box - проверяемый объем
Local px#=EntityX#( point, true )
Local py#=EntityY#( point, true )
Local pz#=EntityZ#( point, true )
Local bx#=EntityX#( box, true )
Local by#=EntityY#( box, true )
Local bz#=EntityZ#( box, true )
Local hw#=MeshWidth#(box)
Local hh#=MeshHeight#(box)
Local hd#=MeshDepth#(box)
If px > ( bx + hw ) or px < x Then
Return 0
End If
If py > ( by + hh ) or py < y Then
Return 0
End If
If pz > ( bz + hd ) or pz < z Then
Return 0
End If
Return 1
End Function
Синтаксис блица не помню, но вроде правильно
__________________
|
(Offline)
|
|
21.02.2014, 21:23
|
#5
|
Бывалый
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений (для 1,133 пользователей)
|
Ответ: Проверка нахождения объекта внутри другого
Сообщение от Arton
Нужно проверить находится ли объект внутри ограничительного бокса. Не как не могу понять как это сделать.
Проверять по радиусу от центра бокса не получится, ведь это не сфера. На булке ничего подходящего не нашёл. Использовать типо MeshWidth, MeshHeight, MeshDepth? Скорость выполнения неважна, т. к. не для реал тайма.
Прошу помочь с алгоритмом, спасибо.
|
Было - было, вот там burovalex'а слушай.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
21.02.2014, 22:44
|
#6
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Проверка нахождения объекта внутри другого
Всем спасибо, прошу прощения что создал эту тему. Плохая идея не спать по ночам, голова не варит.
У Wegox оказывается готовый код идеально подходящий под решение моей задачи. Был вчера в той теме, но слона и не приметил.
Wegox, огромное спасибо
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:36.
|