BSP-конвейер и точность в 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. Спасибо, если хоть терпения хватило до сюда дочитать...
Помогите! Работаю на связке C# + OpenGL. На рендеринг выводятся несколько полупрозрачных фигур. Для корректности вывода, был реализован ("позаимствован" с
Первый, с которым "можно смириться" (но ой как хочется избавиться!) - быстродействие. Фигуры строятся динамически, так что при загрузке очередной фигуры, для сцены приходится перестраивать 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. Спасибо, если хоть терпения хватило до сюда дочитать...
Если нет, то вот ссылка на него.
http://darkangel.wallst.ru/screen_error_08.png
Помогите понять ошибки.
Цитата:
Originally posted by DarkAngel
рисунок в первом сообщении видно?
Если нет, то вот ссылка на него.
http://darkangel.wallst.ru/screen_error_08.png
Помогите понять ошибки.
рисунок в первом сообщении видно?
Если нет, то вот ссылка на него.
http://darkangel.wallst.ru/screen_error_08.png
Помогите понять ошибки.
По-поводу второй проблемы, то мне кажется, что надо сделать простую фильтрацию. Скажем, билинейную.
Цитата:
Originally posted by Dart Bobr
надо сделать простую фильтрацию. Скажем, билинейную.
надо сделать простую фильтрацию. Скажем, билинейную.
А какими методами? И это делается уже после рендеринга? Для bitmap'а?
Просто, я вообще слабо представляю этот процесс. Получится что-то типа размытия (или кристализации)?