Расчет вершинных нормалей в DirectX - PullRequest
1 голос
/ 20 июля 2009

Как опыт обучения, я пишу приложение DirectX 9, управляемое в непосредственном режиме.

Я вручную вычисляю нормали вершин по всем треугольникам в сцене, чтобы обеспечить плавное затенение Гуро.

Это работает, как и ожидалось, но я предполагаю, что это не самый эффективный подход. Можно ли заставить GPU сделать это для меня?

Ответы [ 2 ]

3 голосов
/ 20 июля 2009

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

Если вы имеете в виду, что хотите сгенерировать их перед рендерингом, но используете вместо центрального процессора графический процессор, я бы сказал, что не стоит беспокоиться об ускорении того, что вы собираетесь делать только один раз. Кроме того, я не уверен, что у DX9 есть способ получить информацию о вершинах из шейдера (у DX10 есть).

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

2 голосов
/ 20 июля 2009

Проверьте это и это .

...