![]() |
Найти объект массива по координатам
ептыть, уже со вчерашней ночи голову ломаю :wallbash:
хотя звучит вроде не очень сложно но что-то не выходит ничего. создаётся меш в виде многополигональной плоскости двумя циклами по x и по y (второй внутри первого), при этом при добавлении вертекса он также добавляется в одномерный массив. имея координаты точки (xz) в локальном пространстве этой плоскости надо узнать номер ближайшего вертекса и найти его в массиве. что делать? |
Ответ: Найти объект массива по координатам
UP!!
|
Ответ: Найти объект массива по координатам
Плоскость всегда в одном повороте (смотрит вверх)?
Размер плоскости бывает разный? Перелистываешь весь массив, притом в нём нужно чтобы было записано 2 инфы, 1 - координата по x\z и сама линка на вершину. Далее при перелистывании, если точка ближе к указанным координатам - ставить её как кандидата. Но если следующуя ещё ближе, то ставить её кандидатом, и так пока не кончиться массив. В массиве должно быть записаны локальные координаты точек. Массив для каждой плоскости свой. Примерно такой: Vert[i,3] i - номер в массиве - максимум будет колличество точек. i,0 - X координата. i,1 - Z координата. i,2 - ссылка на точку. |
Ответ: Найти объект массива по координатам
Цитата:
надо как-то перейти от локальных xz в прямой номер в массиве) as i know одномерный массив может симулировать двумерный в стиле array[x*WIDTH+y] Цитата:
Цитата:
|
Ответ: Найти объект массива по координатам
Можно прибегнуть тогда к более сложному варрианту, например индекс указывать 2D, и он будет приблезителен к координате. Таким образом начинать не всё перебирать, а только начиная с индекса приближенного к нужной координате, с маленьким разбросом например в 5 влево, и 5 вправо, таким образом меньше переборов. Но тут нужно продумать всю системку, т.к. вершин может быть очень много, и они тупо не влезут в массив, тогда придётся брать масштаб, например индексы будут в 3 раза больше чем приближенная округлённая позиция. :)
Вообще как понимаю ты делаешь Секторы? По сути если размер сектора не огромный, то перебор другой сотни вершин - не сложная затея.. |
Ответ: Найти объект массива по координатам
Цитата:
а что ты имеешь ввиду под секторами? я так обычно называю выпуклые части уровня с уникальными свойствами, мы их юзаем с помощью BSP но хз при чём тут данная задача) уже в принципе решил её, т.к. синусовое процедурное получение волн, так я просто подставляю в свою формулу нужные x и z и всё) однако насчёт поиска конкретного вертекса тоже может пригодится так что темка ещё актуальна. |
Ответ: Найти объект массива по координатам
Секторы, это когда пространство поделено на одного размера участки, каждый участок имеет x/z индекс в массиве. А списки всех объектов и того что нужно секторизировать, не глобальны, а хранятся в каждом участке. Таким образом если нада перебирать только близкие, или включая прилегающие сектора, ты избегаешь от перебора всего!
А насчёт синуса, дык, если у тебя большие трианглы, тоесть они не смогут во всей мере выделить детализацию, то у тебя привязка не к плоскости, а к формуле. Тоесть если точка находится над серединой триангла, то с подставлением под синус, она не попадёт на триангл, а будет выше или ниже его. Ну если тебе не сильно важна гипер точность.. |
Ответ: Найти объект массива по координатам
http://www.gamedev.ru/code/articles/?id=4196
Вот статейка может пригодиться. Я у себя давныыым давно в mLandscape делал, получение индексов в зависимости от того над каким квадом находится текущая точка. Тоесть должна быть закономерность в индексах, и аналитически-математическая формула для вычесления индексов, зная лишь индекс квада. Если интерестно покапаться, то вот дема, и ссорс разархивь в ту же папку: http://moka.ucoz.ru/load/0-0-0-3-20 http://moka.ucoz.ru/load/0-0-0-4-20 Правдо код старый, и на б3д говняный немного, но вроди кое-как приведённый в порядок.. |
Ответ: Найти объект массива по координатам
Если длина ребер полигонов по х,у постоянна а центр находится в нулевом вертексе:
L=кол-вовертексов по У номер вертекса=((Х*L)/длина ребраХ)+У/длина ребраУ На бумаге все работает. |
Часовой пояс GMT +4, время: 10:58. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot