OpenGL освещает небольшие объекты? - PullRequest
3 голосов
/ 27 апреля 2011

У меня проблемы с освещением при работе с очень маленькими частицами. Я делаю имитацию жидкости на основе частиц и сейчас представляю жидкость в виде очень маленьких полигонизированных сфер (очень маленькими я говорю о радиусе 0,03 единиц для сфер). Освещение в моей сцене не освещает их так, как я хочу, и я не могу заставить его выглядеть правильно. Я ищу что-то похожее на мягкое освещение частиц на этом изображении ... particles with correct lighting

Однако мои частицы выглядят так ...

What my particles look like

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

GLfloat mat_ambient[] = {0.5, 0.5, 0.5, 1.0};
GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0};
GLfloat mat_shininess[] = {10.0};
GLfloat light_position[] = {0.0, 0.1, p_z, 1.0};
GLfloat model_ambient[] = {0.5, 0.5, 0.5, 1.0};

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, model_ambient);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
glEnable(GL_COLOR_MATERIAL);

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

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

glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 10.0);

Теперь мои частицы выглядят так ...

enter image description here это именно то освещение, за которым я был!

1 голос
/ 27 апреля 2011

Размер частиц не является проблемой - вы пересыщаете свои цвета.

Для каждого компонента RGB у вас должно быть ambient + diffuse + specular <= 1.0

Для такой сцены, какя бы ожидал, что ambient будет не более 0,1 или около того, диффузно 0,6 или около того, а остальное - зеркально.

1 голос
/ 27 апреля 2011

Похоже, вам нужно выключить зеркальный компонент вашего материала, немного уменьшить окружающий звук и добавить немного рассеянного затенения (GL_DIFFUSE).Также рассмотрите возможность размещения источника света за окном просмотра / камерой.

...