Цилиндр нормалей - PullRequest
       33

Цилиндр нормалей

0 голосов
/ 06 февраля 2011

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

Black dots on individual cylinders borders

Я считаю, что это побочный продукт того, что цилиндры очень тонкие. Обычно я устанавливаю нормаль на (0,0, + / - 1) при установке top / base, а затем боковые нормали (cos (toRadian (бета)), sin (toRadian (бета)), 0).

Можно ли убрать этот эффект, не получая более «толстые» цилиндры? Или что-то не так в определении нормалей?

Спасибо

1 Ответ

0 голосов
/ 21 февраля 2011

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

Как это исправить? У меня есть пара идей:

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

2) Отключите освещение, тогда все грани будут нарисованы одинакового цвета (при условии, что стороны того же цвета, что и верх).

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

4) Добавьте больше источников света вокруг сцены, перпендикулярно текущему источнику света.

1 & 2 - ваша лучшая ставка в зависимости от того, чего вы пытаетесь достичь.

...