| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Тесселяция полигонов |
| Автор: inkognitum 9.9.2008, 19:47 |
| Добрый день. Помогите с примером тесселяция полигонов, пробую пробую... ничего не выходит. пользуюсь библиотекой - Tao, на С#, все примеры в инете на C++. Самый простой пример который отображает всю процедуры рисования сложного полигона. Заранее спасибо. |
| Автор: Rickert 10.9.2008, 03:46 |
| inkognitum, у OpenGL есть стандартные функции по тесселяции - см. MSDN glTes* Лично у меня был частный случай с вырезание в плоскости дырки, которая представлялась выпулкым полигоном - алгоритм писал сам. Так же на algolist'е есть алгоритмы вычитания. |
| Автор: inkognitum 10.9.2008, 07:30 | ||
Да, я знаю в библиотеке Glu, только я не могу понять как ее использовать. Накомпал кучу коду с примерами на С++, на С# перевести не получается. |
| Автор: Rpahut 10.9.2008, 17:50 | ||
ЗЫ с шарпом не знаком, звиняй уж |
| Автор: inkognitum 11.9.2008, 07:58 | ||||||||
ЗЫ с шарпом не знаком, звиняй уж Спасибо. Я так и делал все, в честности у меня ругается на след. строку кода.
И вопрос как забивать координаты - coordsd3?? у меня показывает тип - double[] и как в одномерный массив забить координаты точки? подрят чтоль Х и Y, если честно недопонимаю этот момент. Добавлено @ 08:06 Вопрос с ошибкой снялся. Вопрос с double[] остался
|
| Автор: Rpahut 11.9.2008, 21:51 |
| coordsd3 я от балды вбивал - лень было рисовать цикл и инициализацию массива. Конечно там массив из трех double передается - x, y, z подряд. Нужно передать координаты всех вершин, соотв. вызываем gluTessVertex по разу для каждой из них. |
| Автор: inkognitum 12.9.2008, 07:49 | ||||
Добрый день. Чет у меня ничего не рисует. делаю вот так.
ошибок нет, но и не рисует ничего. ((( |
| Автор: Rpahut 12.9.2008, 09:31 | ||||
А почему
? ГЛУ читает три координаты все равно, так что даже если Z=0, он должен указываться. Это раз. Два - если не рисует - значит ошибки есть) Три. Добавь следующие ф-ции:
, зарегистрируй их вместо старых каллбэков. Поставь в каждую брейкпоинт и посмотри, выполняются ли они.Если вызываются - знач полигон рисуется, но не там или не так, как ты ожидаешь. Если нет, ну, тогда я где-то накосячил ЗЫ На счет нужно ли писать CALLBACK не уверен - может скомпилируется и без них, может не скомпилируется с ними. |
| Автор: inkognitum 12.9.2008, 11:29 | ||||||||||
Чет странно. Поставил точку останова на функцию:
он туда заходит рочно столько раз сколько моих точек в полигоне, но почему то переменная V пустая ) Еще интересней ) меняю функцию на:
то в функции MyVirtex в переменное V только 1 объект который равен Х, я проверяю мою переменную dbPoint там все 3 координат. |
| Автор: Rpahut 12.9.2008, 23:11 | ||||||||
Так правильнее. Мой косяк.
Скорее всего дебаггер просто показывает тебе только первый элемент - он не знает что их там три. Раз вызываются каллбэки, значит openGL получает координаты вершин. Я бы вставил перед тесселяцией код, выводящий на экран треугольник или линию(
Вот таким макаром у меня работает однозначно. |
| Автор: inkognitum 13.9.2008, 12:30 | ||||
| Мне уже смешно ))) ничего не выходит. Сроки поджимают ((( Я кое что переписал и доработал, стал он полигоны выводить но опять же не сложные а простые. сделал так:
потом немного дописал функцию:
рисует но простые. кстати нашел вот что: https://dappleproject.geosoft.com/browser/dapple/PluginSDK/PolygonFeature.cs?rev=333 там кое что поддчеркнул но всерано не работает. что то странно (( голова уже болит. |
| Автор: Rpahut 13.9.2008, 14:48 | ||
Поподробнее? И какой формы полигоны у тебя? Неплохо бы для GLU_TESS_ERROR тоже сделать каллбэк и посмотреть на что глу жалуется. Еще меня смущает double[] dbPoint = new double[3]; Вроде работать должно, но выглядит странно. Попробуй как в моем предыдущем посте нарисовано - создать один большой массив, в него затолкать все координаты, и уже из него передавать в gluTessVertex. И - наверное С++ и С# тут не сильно отличаются - если есть new, то должен быть и delete. И вобще - может там не в тесселяции проблема? |
| Автор: inkognitum 13.9.2008, 19:27 | ||||
))) все впорядке... видать у меня в голове не все дома. ну ниче ща вот пока в пейнтбольном маче мочился было время в мертвяке подумать.... я просто забыл затирать старую форму полигона перед тем как нарисовать новый ))))) ну вообщем так то все впорядке, работает.. только оказывается он не может обрисовать полигоны у которых линии пересекаются. ) Или я ошибаюсь? Спасибо, за активную помощь, сам бы я не разобрался во всем ))) мог бы дать репутации дал бы.. но не могу (( |
| Автор: Rpahut 13.9.2008, 20:50 | ||
Может. Копай в сторону GLU_TESS_COMBINE |
| Автор: inkognitum 14.9.2008, 11:26 | ||||||
Добрый день. Делаю так:
сама функция:
выдиляет строчку кода где идет подписка на делегат и пишет след. ошибку: Array size control parameter must be an integral type. Хотя вроде все по примеру сделал, и входные параметры одинаковые, я проверял. |
| Автор: Rpahut 14.9.2008, 19:21 | ||
| Эт вопрос по тао и c#, а я в них ни в зуб ногой. А вобще - нашел в сети:
так что второй параметр возможно неправильный. |
| Автор: inkognitum 14.9.2008, 19:51 | ||||
Угу и такое есть. Там перезагруженая функция. Бум разбиратся. |