OpenGL освещение

У меня проблема с освещением opengl, у меня есть объект, скажем так.

введите описание изображения здесь

Это оригинальный объект без применения светового эффекта, поэтому проблема в том, что когда я пытаюсь добавить свет к этому объекту, он скрывает цвета объекта и превращает объект в этот цвет.

введите описание изображения здесь

Я использовал диффузный и зеркальный компоненты:

GLfloat diffu[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat spec[] = {0.5f, 0.5f, 0.5f, 0.5f};
GLfloat shinnes [] = {50};
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffu);
glLightfv(GL_LIGHT1, GL_SPECULAR, spec);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS,shinnes);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);

Так что мне нужно понять, в чем проблема ???


person Alyafey    schedule 23.04.2014    source источник


Ответы (3)


Отсюда (http://www.glprogramming.com/red/chapter05.html) ссылка на сайт:

Определение свойств материала для объектов в сцене

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

Как только вы начинаете использовать освещение, свойства материала объекта (его цвет) определяются свойствами specular / diffuse ..., передаваемыми glMaterialfv (). Итак, если вы использовали glColor (), теперь вам нужно указать свойства материала с помощью glMaterialfv ().

В вашем коде, помимо установки цвета отражения и рассеивания света, вам необходимо установить цвет отражения и рассеивания материала:

// Set light properties
GLfloat diffu[] = {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat spec[] = {0.5f, 0.5f, 0.5f, 0.5f};
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffu);
glLightfv(GL_LIGHT1, GL_SPECULAR, spec);

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1);

// Set material properties
GLfloat shinnes [] = {50};
GLfloat matdiffu[] = {1.0f, 0.f, 0.f, 1.0f};
GLfloat matspec[] = {1.0f, 0.f, 0.f, 1.0f};
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE,matdiffu);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR,matspec);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS,shinnes);

// Draw object
person ilent2    schedule 23.04.2014

diffu и spec также определяют цвет материала; используйте {0f, 1f, 0f, 1f} и {0f, 1f, 0f, 0.5f} для чистого синего цвета (при условии RGBA)

person ratchet freak    schedule 23.04.2014

glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuseColor);

вместе с GL_SHININESS, GL_SPECULAR, чтобы установить свойства материала вашей геометрии. Тогда освещение будет правильно взаимодействовать с геометрическим материалом.

person dragonflyesque    schedule 23.04.2014