Переключение между Smooth Shading и Flat Shading в Opengles 2.0

Я работаю над 3D-приложением в Android, используя opengles 2.0, рисую какую-то модель, но те

Коробчатая модель выглядит слишком гладкой с плавным затенением, и мне нужен сглаженный оттенок для модели сферы.

Я экспортировал 3D-модель в файл .OBJ со сглаженным оттенком из блендера.

Теперь моя структура 3D-модели имеет

на вершину нормально.

использование массива индексов вершин для рисования модели.

Так как нормаль моей модели нормальна для каждой вершины, мой план справиться с этим заключается в создании

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

Я не хочу делать этот план, потому что массив индексов вершин потребляет меньше памяти.

Есть ли способ сделать Flat гладким с массивом индексов вершин для рисования, как функция, чтобы сделать GLSL с использованием среднего значения из интерполированного варьирования или другим способом?

Спасибо за вашу помощь и извините за мой плохой английский.


person user1085647    schedule 28.11.2012    source источник
comment
Посмотрите здесь: stackoverflow.com/questions/9310771/ Я думаю, что это единственный способ сделать это!   -  person Dirk    schedule 29.11.2012
comment
да, я посмотрел на эту ссылку, так что похоже, что это только так. Но все равно спасибо.   -  person user1085647    schedule 30.11.2012


Ответы (1)


Я тоже долго боролся с этим — вы определенно можете изменить свой конвейер, чтобы сгенерировать точные нормали лица и передать их в свой конвейер, а затем использовать это в расчете освещения.

ИЛИ вы можете сделать эту работу в Blender (или любой другой 3D-программе) в самой модели - продублируйте вершины, которые вы хотите сделать плоскими, чтобы каждая грань имела свои собственные вершины, и когда они не связаны с другими гранями, нормали их вершин будут нормали лица (с гладкой или плоской штриховкой). Куб, изначально состоящий из 6 вершин, затем станет 4*6=24 вершинами с теми же 6 гранями четырехугольника, но нормаль вершины каждой вершины будет точно совмещена с нормалью грани четырехугольника.

Конечный результат тот же, гораздо больше вершин нужно передать в конвейер, но мне нравится решение в модели, потому что оно позволяет вам смешивать плавное и плоское затенение там, где вы хотите, в вашей модели.

Я бы предположил, что в блендере может быть даже скрипт для автоматизации этого. Вот нечетко связанная статья о том, что делает Blender и почему в программируемом конвейере нет плоского затенения.

person mobob    schedule 02.12.2012