-
Вечер добрый.
Затруднился куда обратится с данным вопросом. Мне нужно запрогать один алгоритм, а поскольку игры подразумевают это... Вобщем.
Допустим у меня есть набор точек, которые если соединить последовательно, то получится какая-либо фигура. Допустим, у меня есть контуры домов для карты. Задача состоит в заполнении данной фигуры цветом (т.е. допустим требуется нарисовать желтый дом на зеленом газоне). Поскольку "карта" будет большая и полигонов будет много, то я хочу прикрутить к этому делу вбо. Следовательно надо преобразовать данные контуры в полигоны. Я могу придумать алгоритм и запрограммировать, но не хочется писать велосипед, если его уже кто-то написал.
-
Если можешь - напиши свой. Будет понятнее
-
да блин, свой - оно конечно хорошо, но времени заниматься этими велосипедами нет.
-
-
Sapersky, спасибо, разобрался, написал :)
Сессия была, работа, все дела, вот руки опять дошли. Продолжаем :)
У нас есть карта большого города. Она представлена большим количеством домов и других объектов типа улиц и т.п. Полигонов достаточно много, естественно, все рисовать нереально. Как лучше разбить карту и представить данные? Можно все разбить на квадраты и каждому квадрату привязать дома, которые в него попадают. Можно использовать bounding circles по аналогии с bounding spheres :) Вопросы не сложные, но сейчас боюсь ошибиться. Неохота потом все переделывать.
-
> Можно использовать bounding circles
Кругами какого бы то ни было радиуса (пусть даже -> 0) невозможно заполнить какую бы то ни было плоскость целиком. Юзайте квадраты. Или на крайняк шестиугольники =)
-
> невозможно заполнить какую бы то ни было плоскость целиком
Если исключить наложение, конечно же.
-
Ладно, я подумаю об этом завтра :)
Сейчас ещё засада. Дороги в мапинфо - это палочки, которым заданы 2 координаты: начало и конец. Отрезки т.е. Надо их сделать толстыми. Если просто все линии сделать толстыми, то они будут неправильно соединяться, с трещинами. Щас будем думать. Мат. аппарат мож где уже описан? :)
-
> Щас будем думать. Мат. аппарат мож где уже описан? :)
У меня подобное есть. Только для замкнутых кривых Безье... там придётся столько напильником обрабатывать, что проще написать заново. Короче, основная идея такова: Дана ломаная, состоящая из двух отрезков. В простейшем случае, предполагается, что "ширина дороги" меньше, чем удвоенная наименьшая из ломаных (иначе, придётся идти на ухищрения, такие как пропуск вершины, расчёт ближайшего пересечения, и прочее, пока на этом не заостряемся). План действий следующий:
1) Находим угол между отрезками. 2) Складываем их как векторы, выходящие из одной точки, и проставляем результирующему вектору длину, равную |K| = L/2sin(0.5Ф), где L - ширина дороги, Ф - угол между отрезками. 3) Мы получили первую, "внутреннюю" точку дороги. Ищем внешнюю: 4) Строим из точки пересечения два отрезка длины 0.5L, соотв. перпендикулярных данным. 5) По желанию, между ними провешиваем окружность. Если этого не требуется, соединяем так.
-
> между ними провешиваем окружность
Круговой сектор, извиняюсь. Целиком окружность жирновато будет =)
-
...или дугу, если рисуем линиями.
-
Седня попробую, доложу о результатах )
-
> [8] Renegat (16.07.08 13:52)
От это извращение... А почему бы просто не рисовать линии полигонами?
-
> [12] @!!ex © (16.07.08 18:50)
Как, например?
-
> [13] Renegat © (16.07.08 18:55)
ну вообще линия это два треугольника... Соответственно ничего не мешает края треугольников состыковать.
Конечно это придется считать построение треугольников... Однако это все равно делается на уровне драйвера.
P.S. В вашем методе достаточно всегда на стыку рисовать сглаженную точку.
-
Линия - это суть спрайт. А если карту придётся вертеть? Я не думаю, что когда дороги "встанут на дыбы", стремясь быть повёрнутыми к наблюдателю, и частично пропадут "под землёй", это будет очень уж хорошо выглядеть :)
-
Поэтому я и предлагаю такие извращения))
|