| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Закпаска многоугольника в Direct3D |
| Автор: bublik478 15.2.2006, 17:44 |
| Вопрос в следующий: Имеется многоугольник в 3D например как ниже или прекреплённый: ___ / ....\____ | .............\ | ..............\ \-------.......| …….....\___| Необходимо его закрасить одним цветом, Как ето сделать? Direct3D понимает закраску треугольника, значит надо разбивать многоугольник на треугольники? Есть ли какой-нибудь другой способ? Заранее спасибо! |
| Автор: mr.DUDA 15.2.2006, 19:15 |
| По-любому, фигуру придётся разбить на треугольники. |
| Автор: bublik478 16.2.2006, 15:50 |
| тогда такой вопрос -> как ето легче всего сдалать? есть много методов триангуляции, но те что я смотрел подходят не идеально, Делоне например сделает сетку немного с большей поверхностью чем полигон, особенно если есть выступающие части, Ухорезание работает если полигон весь составлен по часовой стрелки. а в моем случае ето предсказать тяжело! |
| Автор: MaxB 17.2.2006, 18:03 |
| Я как-то нашёл не плохую реализацию алгоритма триангуляции на C++, правда не знаю, что там за алгоритм используется. Он поддерживает любые полигоны, и даже полигоны с дырами, при чём довольно быстро. Если надо могу скинуть. |
| Автор: mr.DUDA 17.2.2006, 18:18 |
| Скинь ссылочку, пожалуйста. |
| Автор: MaxB 17.2.2006, 18:28 |
| Вот сылка: ftp://ftp.cs.man.ac.uk/pub/toby/gpc/gpc232.zip |
| Автор: bublik478 17.2.2006, 19:25 |
| eto triangulyaciya poligonov, izvestnaya stranica, avtor dazhe okazivaet nekiy support esli napisat', no bistro ona ne rabotaet esli poligon bol'shoy. no vseravno spasibo. |
| Автор: mr.DUDA 17.2.2006, 22:53 |
| Насколько я понял, bublik478, необходим алгоритм заливки для полигона, выводящего реку или что-то подобное, я прав ? |
| Автор: bublik478 20.2.2008, 21:47 |
| прав mr.DUDA, реку закрасить надо |
| Автор: arilou 21.2.2008, 12:32 |
| bublik478, т.е. ты за два года её так и не закрасил? |
| Автор: Dronchik 21.2.2008, 16:48 |
| Проще текстуру натянуть. |
| Автор: bublik478 21.2.2008, 17:00 |
| arilou, ты тоже прав! два года я не стал ломать голову над этим! я не стал голову ломать, я на openGL сделал! там есть готовая функция! а ещё написал триангулятор, отдельно данные о полигоне загоняю туда и триангулирую при необходимости, перевожу в формат TIN (triangle network) и показываю в DirectX как закрашенный полигоне. жалко что это не работает в DirectX на лету как ето делат OpenGl Добавлено через 2 минуты и 24 секунды Dronchik, а не подскажите как это делается??? т.е. есть замкнутая кривая линия (полигон) и можно текстуру натянуть на это дело? это было бы здорово! |
| Автор: Dronchik 21.2.2008, 17:23 | ||||
bublik478, можно воспользоваться функцией
Добавлено @ 17:28 Вот как выглядит описанная выше мною функция
|
| Автор: bublik478 21.2.2008, 17:31 |
как текутуру загрузить - это понятно. а вот как ёё наложить на замкнутую линию???? даже если присвоить координаты текстурные правильно, то DirektX рисует её как линию а не полигон!! даже если стоит frame в solid! т.к. DirectX насколько я понимаю может закрашивать цветом или текстурой тока примитивный полигон! (треугольник) Я не прав? |
| Автор: Dronchik 21.2.2008, 17:45 |
| bublik478, замкнутая линия должна как то храниться. я привёл функцию, которой можно накладывать текстуру на меш. Считаю легче было бы сделать модель( да хоть плэйн) и накладывать на него текстуру, чем возиться с такими линиями. |
| Автор: bublik478 21.2.2008, 18:10 |
Dronchik, проблема не в том как делать исходные данные чтоб они были удобными для показа на в DirectX а проблема в данных! их много и их формат менять никто не будет, а надо попеременно что-то считывать и выводить на экран! причём на лету а данные эти хранятся тока как замкнутые линии(полигоны)! |
| Автор: bublik478 21.2.2008, 19:01 |
| посмотри файл там скриншоты |
| Автор: Dronchik 21.2.2008, 19:08 |
| в чём сделана это линия замкнутая, в каком редакторе??? |
| Автор: bublik478 21.2.2008, 19:25 |
| это стандартный ESRI Shapefile, это GIS данные можешь посмотреть результат в файле. Добавлено через 1 минуту и 43 секунды т.е. по русски это ГЕО данные (геоинформационные) |
| Автор: Dronchik 22.2.2008, 10:24 |
| bublik478, прости. Тогда я помочь ничем больше не могу. |
| Автор: arilou 22.2.2008, 12:13 |
| bublik478, ты не мог бы поподробнее описать проблему, а то не совсем понятно, какой результат должен получиться. ты же сделал триангуляцию. тебе надо просто закрасить или текстуру натянуть? при закрашивании всё просто - задаются цвета вертексов и всё. а для текстурирования, для каждого вертекса надо задавать текстурные координаты. и тут, если у тебя сетка нерегулярная, могут быть вопросы, т.к. будет искажение текстуры. |
| Автор: bublik478 22.2.2008, 16:36 |
как текстуру наложить или как раскрасить - это понятно. в примере я раскрашиваю. но триангулирую я в другой программе! а вот пока не нашёл чтоб DirectX на лету закрашивал многоугольник! т.е. приходится триангулировать многоугольник в другой программе, делать из него TIN (треугольную сетку) сохранять в другом виде, делать поддержку для загрузки этого вида файла в программу что показывает на экране... а вот если бы можно было бы загрузить линии в DirectX и сказать ему мол покажи это дело как закрашенный многоугольник! но этого я в DirectX так и не нашёл! вот и дыл вопрос есть ли средства в DirectX которые показыват поверхность как закрашенную поверхность если задать тока граничные линии (многоугольник) кстати зато в OpenGL уже есть готовая функция - по моему tessellate называется. |