|
3D-программирование Вопросы, касающиеся программирования 3D мира |
15.08.2009, 17:38
|
#1
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Найти объект массива по координатам
ептыть, уже со вчерашней ночи голову ломаю
хотя звучит вроде не очень сложно но что-то не выходит ничего.
создаётся меш в виде многополигональной плоскости двумя циклами по x и по y (второй внутри первого), при этом при добавлении вертекса он также добавляется в одномерный массив.
имея координаты точки (xz) в локальном пространстве этой плоскости надо узнать номер ближайшего вертекса и найти его в массиве. что делать?
|
(Offline)
|
|
15.08.2009, 18:52
|
#2
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Найти объект массива по координатам
UP!!
|
(Offline)
|
|
15.08.2009, 19:06
|
#3
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Найти объект массива по координатам
Плоскость всегда в одном повороте (смотрит вверх)?
Размер плоскости бывает разный?
Перелистываешь весь массив, притом в нём нужно чтобы было записано 2 инфы, 1 - координата по x\z и сама линка на вершину.
Далее при перелистывании, если точка ближе к указанным координатам - ставить её как кандидата. Но если следующуя ещё ближе, то ставить её кандидатом, и так пока не кончиться массив.
В массиве должно быть записаны локальные координаты точек.
Массив для каждой плоскости свой.
Примерно такой: Vert[i,3]
i - номер в массиве - максимум будет колличество точек.
i,0 - X координата.
i,1 - Z координата.
i,2 - ссылка на точку.
|
(Offline)
|
|
15.08.2009, 19:10
|
#4
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Найти объект массива по координатам
Перелистываешь весь массив, притом в нём нужно чтобы было записано 2 инфы, 1 - координата по x\z и сама линка на вершину.
Далее при перелистывании, если точка ближе к указанным координатам - ставить её как кандидата. Но если следующуя ещё ближе, то ставить её кандидатом, и так пока не кончиться массив.
|
ну это слишком медленно будет) т.к. всегда можно округлить число, думаю есть и более прямой способ. мне это нужно взамен xLinePick т.к. ОЧЕНЬ медленно выходит, а там как раз по логике и перебираются все треугольники.
надо как-то перейти от локальных xz в прямой номер в массиве)
as i know одномерный массив может симулировать двумерный в стиле array[x*WIDTH+y]
Плоскость всегда в одном повороте (смотрит вверх)?
|
да
Размер плоскости бывает разный?
|
нет
|
(Offline)
|
|
15.08.2009, 19:25
|
#5
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Найти объект массива по координатам
Можно прибегнуть тогда к более сложному варрианту, например индекс указывать 2D, и он будет приблезителен к координате. Таким образом начинать не всё перебирать, а только начиная с индекса приближенного к нужной координате, с маленьким разбросом например в 5 влево, и 5 вправо, таким образом меньше переборов. Но тут нужно продумать всю системку, т.к. вершин может быть очень много, и они тупо не влезут в массив, тогда придётся брать масштаб, например индексы будут в 3 раза больше чем приближенная округлённая позиция.
Вообще как понимаю ты делаешь Секторы?
По сути если размер сектора не огромный, то перебор другой сотни вершин - не сложная затея..
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.08.2009, 19:40
|
#6
|
Терабайт исходников
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений (для 6,051 пользователей)
|
Ответ: Найти объект массива по координатам
Вообще как понимаю ты делаешь Секторы?
|
да нет, просто водичку с волнами)
а что ты имеешь ввиду под секторами? я так обычно называю выпуклые части уровня с уникальными свойствами, мы их юзаем с помощью BSP но хз при чём тут данная задача)
уже в принципе решил её, т.к. синусовое процедурное получение волн, так я просто подставляю в свою формулу нужные x и z и всё) однако насчёт поиска конкретного вертекса тоже может пригодится так что темка ещё актуальна.
|
(Offline)
|
|
15.08.2009, 19:52
|
#7
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Найти объект массива по координатам
Секторы, это когда пространство поделено на одного размера участки, каждый участок имеет x/z индекс в массиве. А списки всех объектов и того что нужно секторизировать, не глобальны, а хранятся в каждом участке. Таким образом если нада перебирать только близкие, или включая прилегающие сектора, ты избегаешь от перебора всего!
А насчёт синуса, дык, если у тебя большие трианглы, тоесть они не смогут во всей мере выделить детализацию, то у тебя привязка не к плоскости, а к формуле. Тоесть если точка находится над серединой триангла, то с подставлением под синус, она не попадёт на триангл, а будет выше или ниже его.
Ну если тебе не сильно важна гипер точность..
|
(Offline)
|
|
15.08.2009, 19:59
|
#8
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Найти объект массива по координатам
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д говняный немного, но вроди кое-как приведённый в порядок..
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.08.2009, 20:28
|
#9
|
Разработчик
Регистрация: 09.12.2007
Сообщений: 376
Написано 83 полезных сообщений (для 122 пользователей)
|
Ответ: Найти объект массива по координатам
Если длина ребер полигонов по х,у постоянна а центр находится в нулевом вертексе:
L=кол-вовертексов по У
номер вертекса=((Х*L)/длина ребраХ)+У/длина ребраУ
На бумаге все работает.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:00.
|