2009-06-05 4 views
2

Когда я загораю свою человеческую модель в OpenGL с использованием нормалей лица, это очень очевидно, где каждое лицо находится на модели. Освещение становится значительно более плавным, используя вершинные нормали, но все же заметно. Существует ли какая-либо методика для сглаживания органических моделей без добавления дополнительных вершин (например, подразделов)?Методы сглаживания краев лица в OpenGL

ответ

6

Если вы видите единичное лицо с каждой вершиной нормалей вы могли забыть включить гладкую облицовку:

glShadeModel(GL_SMOOTH); 

Если это не помогает убедиться, что все вершины с одной и той же позицией и имеют одинаковые нормальные. Это должно быть сделано блендером автоматически. Также возможно, что ваша модель имеет слишком много полигонов. Если это так, вам придется либо использовать больше полигонов, либо делать то, что сказал басзеро. Create a normal map и использовать это вместе с шейдером GLSL.

4

Если у вас есть доступ к более высокой модели разрешения/сетки или, возможно, порядочный 3d modeling tool, что может создать выс модель с помощью подразделений или других необычных методов ...

GLSLper-pixel-lighting + normal maps

UPDATE :

http://www.blender.org/development/release-logs/blender-246/render-baking/

+0

Я использую Blender. Я использую свою модель low-poly по соображениям производительности. Затенение фонгов кажется многообещающим, но его не поддерживает OpenGL, и преимущество не гарантирует успех. – Kai

+0

Если это не вопрос OpenGL ES 1.1 (например, iPhone), ваше оборудование, вероятно, поддерживает шейдеры, и вы можете написать шейдер, который реализует phong shading + normal mapping. –

+0

Правильно, вы создаете модель высокого разрешения в Blender и используете ее для создания нормальной карты. Создайте более низкую версию res и используйте обычную карту + шейдеры для создания недостающей детали вершин в конечном рендеринге продукта – basszero

1

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

Cheers!