Проблемы MipMapping в OpenGL - PullRequest
       100

Проблемы MipMapping в OpenGL

1 голос
/ 17 декабря 2010

Я загружаю 3D-объекты (obj, 3ds или collada файлы) в мое приложение openGL.Среда 3 довольно большая (несколько сотен метров по всей оси).Моя проблема в том, что более мелкие трехмерные объекты (т.е. порядка ~ <1-2 м) не проходят должную проверку глубины.В зависимости от масштаба камеры я иногда вижу заднюю грань объекта (я использовал простой куб для тестирования) или другие лица, которые становятся видимыми / невидимыми / порванными.Пожалуйста, смотрите прикрепленные изображения для лучшего объяснения.Я склонен полагать, что проблема связана с включением mipmapping.Я хотел бы либо отключить mipmapping (может кто-нибудь предложить простой и быстрый способ сделать это), либо установить большее разрешение для объектов mipmapped.Или я полностью не лаю? </p>

alt text alt text alt text

Спасибо

Крис

Ответы [ 2 ]

11 голосов
/ 17 декабря 2010

Это результат недостаточной точности z-буфера, что является проблемой в играх, в которых есть огромные миры, но (относительно) маленькие объекты. Непосредственным решением было бы попытаться использовать 24-битный z-буфер вместо 16-битного. Другим способом решения этой проблемы было бы сделать игровой мир двумя шагами: сначала большие удаленные объекты, затем очистить zbuffer и затем нарисовать более близкие объекты.

Кстати, эта специфическая проблема называется z-fight, вот большой ресурс по этому вопросу: http://www.codermind.com/articles/Depth-buffer-tutorial.html

На вынос - последний абзац статьи выше:

истинная проблема в том, что вы не можете рисовать оба объекта, которые очень далеко и объекты, которые очень близко с буферные уравнения той же глубины. если ты хочу рисовать очень далеко объекты, то вы нужно пожертвовать своим ближним видом толкая это дальше. Чтобы избежать отсечения артефакты вы можете сделать свое столкновение конверт достаточно большой, чтобы ваш плоскость отсечения никогда не будет перехватывать существующий объект внутри вашего усеченного конуса. Или вы можете сделать объект постепенно исчезают с прозрачностью, как они подойди к своей плоскости отсечения.

Если вы хотите держать рядом с объектами и одновременно рисовать горы (или планеты) на дальнем расстоянии, то вы может разрезать ваш рендеринг по частям. Первый рисуя ваши дальние объекты, затем очистка буфера глубины и рендеринг ближайших объектов с другой буфер z.

2 голосов
/ 17 декабря 2010

Как и Хулио, я считаю, что это проблема глубины точности, а не то, что связано с mip-mapping. Тем не менее, я предлагаю вам начать с настройки ближней и дальней плоскости отсечения, прежде чем менять что-либо еще (вероятно, вы все равно уже используете 24-битный буфер глубины, поскольку это значение по умолчанию для большинства драйверов / карт). В частности, ближняя плоскость должна быть как можно дальше от вашей сцены. Ищите звонки на glFrustum или gluPerspective.

...