Развертка UV в Stage3D/AS3


Я написал небольшой анализатор файлов .obj для wavefront (формат 3D-модели), я могу правильно отображать геометрию, но у меня проблемы с ее правильным текстурированием.
Единственный способ Я могу получить правильную текстуру, разделив модель в моем 3D-редакторе, экспортируя и анализируя ее таким образом.. то есть: я больше не делюсь данными вершин, каждый треугольник сам по себе, поэтому мой массив indexBuffer выглядит как это [0,1,2,3,4,5,6...], которого я хочу избежать.

Правильная текстура/неэффективная геометрия (без повторного использования вершин: 36 вершин): http://imageshack.us/a/img29/2242/textureright.jpg
Неверная текстура/правильная топология (Совместное использование данных: только 8 вершин = эффективно): http://imageshack.us/a/img443/6160/texturewrong.jpg

Я думал попробовать отделить буфер UV от indexBuffer, предназначенного для вершин, но не нашел способа сделать это; если это действительно выполнимо.
Я также возился с кодом agal, но не добился никаких результатов.

Желаемый результат — возможность передавать разные координаты UV в одну и ту же вершину в контексте рисуемого треугольника.
Что делать?
Спасибо. (я новичок в 3D-программировании)


person chadiik    schedule 27.04.2013    source источник


Ответы (2)


Может показаться, что вам нужна только одна вершина на «расположение вершины» вашей модели, но, насколько я понимаю парсер .obj, вам нужно определить свои вершины вокруг FACES. Это означает, что у вас может быть несколько вершин для некоторых местоположений — в зависимости от того, сколько граней примыкает к этому местоположению — но выигрыш в том, что вы можете иметь разные UV-координаты для этих вершин в одном и том же месте.
Я предлагаю изменить ваш синтаксический анализатор на создавать вершины на основе граней, которые они определяют, а не только их положения. Я знаю, что это увеличивает количество вершин, но из того, что я читал, это неизбежно, если вам нужны разные UV для одного и того же местоположения вершины.
Так что, к сожалению, я почти уверен, что ваш первый вариант - это способ идти.

person moosefetcher    schedule 29.04.2013
comment
Я не могу поверить, что это единственный вариант. Это не относится только к синтаксическому анализатору .obj: допустим, я хочу создать четырехугольник и иметь два треугольника двух разных цветов, я уверен, что это достижимо каким-то другим способом, кроме как иметь 6 вершин для этого единственного четырехугольника. Существующие игры stage3d не могут иметь экспоненциальное увеличение количества вершин таким образом... Спасибо за ответ :) - person chadiik; 29.04.2013
comment
Если вы прокрутите вниз до заголовка «Определение геометрии с помощью буферов вершин и индексных буферов», на этой странице есть информация... adobe.com/devnet/flashplayer/articles/how-stage3d-works.html о том, как буфер вершин определяет грани. - person moosefetcher; 29.04.2013

похоже, что ваша операция сварки неверна. Для сварки вершин вы должны быть уверены, что позиции, UV-координаты, нормали и касательные (если они вам нужны) равны

person Sergey Gonchar    schedule 29.04.2013