Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

BSP-конвейер и точность в OpenGL

458
02 августа 2005 года
DarkAngel
27 / / 20.01.2000
Помогите! Работаю на связке C# + OpenGL. На рендеринг выводятся несколько полупрозрачных фигур. Для корректности вывода, был реализован ("позаимствован" с GameDev.RU) BSP-конвейер. Корректность вывода обеспечена. НО! Есть несколько минусов.
Первый, с которым "можно смириться" (но ой как хочется избавиться!) - быстродействие. Фигуры строятся динамически, так что при загрузке очередной фигуры, для сцены приходится перестраивать BSP-дерево (node-based-BSP-tree). Задержки приличные, но либо задержки при перестроении дерева (сдалансированность) либо задержки при рендеринге (несбалансированное дерево).
Второй, от которого "надо избавиться" (но пока приходится мириться) - битые пиксели. При выводе на рендеринг фигуры, "между треугольников" пропадают (или проявляется наложение) пиксели. Для дешения этой проблемы использовались все решения, пришедшие мне на ум:
- был пересмотрен метод рассечения треугольников (3 варианта: один самопальный, 2 "позаимствованных" из других движков)
- был произведен перевод координат на более точный тип (double - погрешность в 15-ом знаке)
- был произведен перевод на общие точки для смежных треугольников (список точек и треугольники ссылаются на список, а не хранят точки "в себе")

При наложении поверх (!) треугольников (GL_TRIANGLES) некоего подобия wireframe (обход треугольника с GL_LINE_STRIP), точки "закрываются". Но корректно это выглядит лишь на непрозрачных моделях. При полупрозрачности (glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)) происходит наложение "каркаса" на фигуру и выглядит это очень не эротично. :-(

Вопрос в том, откуда могут проявлятся эти точки? При рендеринге используется glVertex3d. Проекция - перспективная (проверил на gluOrtho2D - не помогло). Установлено:
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glHint(GL_POLYGON_SMOOTH, GL_NICEST);

Возможно ли, что в OpenGL'е есть некоторые глюки с точностью, о которых я один не знаю? И которые можно обойти. Или это у меня глюк? Или какой другой вариант проявления точек (там и "зазоры" и "наложения" в одном и том же месте при немого отличных углах может быть)???

Или как можно выводить 2 и более пересекающихся модели на рендеринг корректно? (это я пытался обсуждать тут)

Буду благодарен за любой совет...

P.S. Спасибо, если хоть терпения хватило до сюда дочитать...

458
03 августа 2005 года
DarkAngel
27 / / 20.01.2000
рисунок в первом сообщении видно?
Если нет, то вот ссылка на него.
http://darkangel.wallst.ru/screen_error_08.png
Помогите понять ошибки.
255
03 августа 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by DarkAngel
рисунок в первом сообщении видно?
Если нет, то вот ссылка на него.
http://darkangel.wallst.ru/screen_error_08.png
Помогите понять ошибки.


По-поводу второй проблемы, то мне кажется, что надо сделать простую фильтрацию. Скажем, билинейную.

458
03 августа 2005 года
DarkAngel
27 / / 20.01.2000
Цитата:
Originally posted by Dart Bobr
надо сделать простую фильтрацию. Скажем, билинейную.

А какими методами? И это делается уже после рендеринга? Для bitmap'а?

Просто, я вообще слабо представляю этот процесс. Получится что-то типа размытия (или кристализации)?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог