Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Закпаска многоугольника в 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, необходим алгоритм заливки для полигона, выводящего реку или что-то подобное, я прав ? smile

Автор: bublik478 20.2.2008, 21:47
прав mr.DUDA, реку закрасить надо

Автор: arilou 21.2.2008, 12:32
bublik478, т.е. ты за два года её так и не закрасил? smile 

Автор: Dronchik 21.2.2008, 16:48
Проще текстуру натянуть. smile 

Автор: bublik478 21.2.2008, 17:00
arilou, ты тоже прав! два года я не стал ломать голову над этим! smile
я не стал голову ломать, я на openGL сделал! там есть готовая функция!

а ещё написал триангулятор, отдельно данные о полигоне загоняю туда и триангулирую при необходимости, перевожу в формат TIN (triangle network) и показываю в DirectX как закрашенный полигоне.

жалко что это не работает в DirectX на лету как ето делат OpenGl

Добавлено через 2 минуты и 24 секунды

Dronchik, а не подскажите как это делается???

т.е. есть замкнутая кривая линия (полигон) и можно текстуру натянуть на это дело? это было бы здорово!

Автор: Dronchik 21.2.2008, 17:23
bublik478, можно воспользоваться функцией 
Код

D3DCreateTextureFromFile(pD3DDevice/*девайс устройства*/, "tex.bmp"/*файл текстуры*/, &tQuadTexture/*адрес, указывающий на квадратность текстуры, вроде :biggrin */)


Добавлено @ 17:28
Вот как выглядит описанная выше мною функция
Код

HRESULT D3DXCreateTextureFromFile(
       LPDIRECT3DDEVICE9 pDevice,
       LPCTSTR pSrcFile,
       LPDIRECT3DTEXTURE9 *ppTexture);

Автор: 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, прости. Тогда я помочь ничем больше не могу. smile  smile 

Автор: arilou 22.2.2008, 12:13
bublik478, ты не мог бы поподробнее описать проблему, а то не совсем понятно, какой результат должен получиться. ты же сделал триангуляцию. тебе надо просто закрасить или текстуру натянуть?

при закрашивании всё просто - задаются цвета вертексов и всё. 
а для текстурирования, для каждого вертекса надо задавать текстурные координаты. и тут, если у тебя сетка нерегулярная, могут быть вопросы, т.к. будет искажение текстуры. 

Автор: bublik478 22.2.2008, 16:36

как текстуру наложить или как раскрасить - это понятно. в примере я раскрашиваю. но триангулирую я в другой программе!

а вот пока не нашёл чтоб DirectX на лету закрашивал многоугольник!

т.е. приходится триангулировать многоугольник в другой программе, делать из него TIN (треугольную сетку) сохранять в другом виде, делать поддержку для загрузки этого вида файла в программу что показывает на экране...

а вот если бы можно было бы загрузить линии в DirectX и сказать ему  мол покажи это дело как закрашенный многоугольник!

но этого я в DirectX так и не нашёл! вот и дыл вопрос есть ли средства в DirectX  которые показыват поверхность как закрашенную поверхность если задать тока граничные линии (многоугольник)

кстати зато в OpenGL уже есть готовая функция - по моему tessellate называется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)