Я отрисовываю с помощью ОпенГЛ 3д-модели, созданные в Блендере (экспортирую модели из Блендера в h файл с помощью http://iphonedevelopment.blogspot.com/2009...er-export.html).
При открытии моделей в Блендере они выглядят правильно. При отрисовке с помощью программы на поверхности модели видны черные трехугольники (самма модель раскрашена в серый). При вращении и приближении модели треугольники "меняют" свое расположение на поверхности модели.
В чеи вероятнее всего может быть причина появления артефактов и как от них избавиться?
В самой ОпенГЛ-программе все просто, поэтому полагаю, что следует разбираться с настройками в Блендере.
Модель очень простая - тело , раскрашенное в серый цвет (vertex paint). Волосы покрашены в черный. больше цветов нет.
На скриншоте показана голова (волосы) - на ней глюк очень замеетен. Возможно, это связано с тем, что модель сначала полностью красилась в серый цвет, а потом волосы красилисьв черный?
Обратл внимание - чем ближе модель, тем менее заметен артефакт (меньше "неправильных" треугольников)
Если повернуть модель лицом (чтобы окрашенная в черный цвет часть была не видна) - то через серое лицо "просвечивают" черные тругольники.
Petya
> При вращении и приближении модели треугольники "меняют" свое расположение на поверхности модели.
Пахнет Z-fight'ингом. Проверь, что в модели нет дублирующихся треугольников, треугольников, лежащих в одной плоскости и т.д.
Проверь также нормали. Все ли смотрят наружу.
Если можешь, выложи blend-файл с проблемной моделью тут.
В самой модели только один глючок.
На внутренней стороне шапки волос, прямо на макушке:
При рендере страдает вся модель, или только волосы?
Тут остается только грешить либо на экспортер (кстати, линк дохлый, или некорректно вставлен),
либо на буфер глубины дивайса. Волосы не двухсторонние, а вполне себе объемная шапка, с уверенной толщиной между внешней и внутренней стороной.
Тут еще вариант - что за формат на выходе экспортера, и не рубит ли он точность, пригоняя координаты вершин к целочисленным на грубой сетке.
Толко волосы
Ссылка - вот
http://iphonedevelopment.blogspot.com/2009/07/improved-blender-export.html
На выходе - h-файл , такого вида
static const ColoredVertexData3D modelData[] = {
{/*vert:*/{-3.058000, 1.155600, 7.883200}, /*normal:*/{0.596545, -0.233161, -0.767937}, /*color:*/{0.654902, 0.654902, 0.654902, 1.000000}},
...
};
Глюки возникают на видимых частях модели, за которыми имеются (не видимые с текущей позиции) части модели другого цвета. Например, если смотреть на черные волосы, то глюк возникает ( за черными волосами есть серое лицо, не видимое с текущей позиции).
ох жестокий формат... Никакой индексации.
>Глюки возникают на видимых частях модели, за которыми имеются (не видимые с текущей позиции) части модели другого цвета.
Тест глубины включен? А то может случиться, что задние фейсы нарисуются поверх ближних, просто потому, что они рисуются позже (лежат дальше от начала массива вершин).
Включен
Обратил внимание - чем ярче пятно окраски, тем заметнее артефакт (больше треугольников "неправильного" цвета)
Модель tsvetok и скриншоты из программы Screenshots
Ищи грабли в коде на своей стороне.
Вот прям щас прочитал tsvetok, экспортированный тем скриптом. И влобно отрисовал (жаба).
Получается ровно то же, что и в блендере:
Проверь, что ты не рисуешь ту же модель дважды в своем коде. С разными материалами, или освещением.
Спасибо!
Проверю.
Проверли - все вроде бы ок.
Обратил внимание - если повернуть стол вверх ногами, то ярко-красное пятно и вазу видно "сквозь" стол, хотя стол имеет толщину.
Скриншот
Какая разрядность буфера глубины на устройстве, и какие стоят расстояния до near/far плоскостей отсечения?
Petya
блендинг проверь
Нашел похожую проблему
http://www.iphonedevsdk.com/forum/iphone-sdk-development/5239-ope… -culling.html
Исправил так
const GLfloat zNear = 1.0f /*0.01*/ , zFar = /*1000.0*/ 5000.0f,
(в комментариях старые значения) - проблема исчезла
RPGman, большое спасибо!
Petya
> Исправил так , zFar = 5000.0f,
Т.е. это все-таки был Z-fighting.
Совет - оцени, каких масштабов будет сцена, и не задвигай zFar так далеко.
Приравняй виртуальный метр в сцене реальному метру. Если игровая сцена охватывает вглубь ну максимум сотню метров, так ли нужно отодвигать заднюю плоскость на расстояние 5 километров?
Точность буфера глубины очень сильно хромает при огромных значениях zFar (как и при маленьких значениях zNear).
Тема в архиве.