forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Найти объект массива по координатам (http://forum.boolean.name/showthread.php?t=8912)

Mr_F_ 15.08.2009 17:38

Найти объект массива по координатам
 
ептыть, уже со вчерашней ночи голову ломаю :wallbash:
хотя звучит вроде не очень сложно но что-то не выходит ничего.

создаётся меш в виде многополигональной плоскости двумя циклами по x и по y (второй внутри первого), при этом при добавлении вертекса он также добавляется в одномерный массив.
имея координаты точки (xz) в локальном пространстве этой плоскости надо узнать номер ближайшего вертекса и найти его в массиве. что делать?

Mr_F_ 15.08.2009 18:52

Ответ: Найти объект массива по координатам
 
UP!!

moka 15.08.2009 19:06

Ответ: Найти объект массива по координатам
 
Плоскость всегда в одном повороте (смотрит вверх)?
Размер плоскости бывает разный?

Перелистываешь весь массив, притом в нём нужно чтобы было записано 2 инфы, 1 - координата по x\z и сама линка на вершину.
Далее при перелистывании, если точка ближе к указанным координатам - ставить её как кандидата. Но если следующуя ещё ближе, то ставить её кандидатом, и так пока не кончиться массив.
В массиве должно быть записаны локальные координаты точек.
Массив для каждой плоскости свой.
Примерно такой: Vert[i,3]
i - номер в массиве - максимум будет колличество точек.
i,0 - X координата.
i,1 - Z координата.
i,2 - ссылка на точку.

Mr_F_ 15.08.2009 19:10

Ответ: Найти объект массива по координатам
 
Цитата:

Перелистываешь весь массив, притом в нём нужно чтобы было записано 2 инфы, 1 - координата по x\z и сама линка на вершину.
Далее при перелистывании, если точка ближе к указанным координатам - ставить её как кандидата. Но если следующуя ещё ближе, то ставить её кандидатом, и так пока не кончиться массив.
ну это слишком медленно будет) т.к. всегда можно округлить число, думаю есть и более прямой способ. мне это нужно взамен xLinePick т.к. ОЧЕНЬ медленно выходит, а там как раз по логике и перебираются все треугольники.
надо как-то перейти от локальных xz в прямой номер в массиве)
as i know одномерный массив может симулировать двумерный в стиле array[x*WIDTH+y]

Цитата:

Плоскость всегда в одном повороте (смотрит вверх)?
да

Цитата:

Размер плоскости бывает разный?
нет

moka 15.08.2009 19:25

Ответ: Найти объект массива по координатам
 
Можно прибегнуть тогда к более сложному варрианту, например индекс указывать 2D, и он будет приблезителен к координате. Таким образом начинать не всё перебирать, а только начиная с индекса приближенного к нужной координате, с маленьким разбросом например в 5 влево, и 5 вправо, таким образом меньше переборов. Но тут нужно продумать всю системку, т.к. вершин может быть очень много, и они тупо не влезут в массив, тогда придётся брать масштаб, например индексы будут в 3 раза больше чем приближенная округлённая позиция. :)
Вообще как понимаю ты делаешь Секторы?
По сути если размер сектора не огромный, то перебор другой сотни вершин - не сложная затея..

Mr_F_ 15.08.2009 19:40

Ответ: Найти объект массива по координатам
 
Цитата:

Вообще как понимаю ты делаешь Секторы?
да нет, просто водичку с волнами)

а что ты имеешь ввиду под секторами? я так обычно называю выпуклые части уровня с уникальными свойствами, мы их юзаем с помощью BSP но хз при чём тут данная задача)

уже в принципе решил её, т.к. синусовое процедурное получение волн, так я просто подставляю в свою формулу нужные x и z и всё) однако насчёт поиска конкретного вертекса тоже может пригодится так что темка ещё актуальна.

moka 15.08.2009 19:52

Ответ: Найти объект массива по координатам
 
Секторы, это когда пространство поделено на одного размера участки, каждый участок имеет x/z индекс в массиве. А списки всех объектов и того что нужно секторизировать, не глобальны, а хранятся в каждом участке. Таким образом если нада перебирать только близкие, или включая прилегающие сектора, ты избегаешь от перебора всего!

А насчёт синуса, дык, если у тебя большие трианглы, тоесть они не смогут во всей мере выделить детализацию, то у тебя привязка не к плоскости, а к формуле. Тоесть если точка находится над серединой триангла, то с подставлением под синус, она не попадёт на триангл, а будет выше или ниже его.
Ну если тебе не сильно важна гипер точность..

moka 15.08.2009 19:59

Ответ: Найти объект массива по координатам
 
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д говняный немного, но вроди кое-как приведённый в порядок..

FrankH 15.08.2009 20:28

Ответ: Найти объект массива по координатам
 
Если длина ребер полигонов по х,у постоянна а центр находится в нулевом вертексе:
L=кол-вовертексов по У
номер вертекса=((Х*L)/длина ребраХ)+У/длина ребраУ
На бумаге все работает.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot