LocatorNode в Maya всегда заштрихован плоско

Я создаю LocatorNode в Maya, который отображает куб с помощью OpenGL (Viewport 2.0) со следующим кодом:

glBegin (GL_QUADS);

// top
glNormal3f (0.0f, 0.0f, 1.0f); glVertex3f (1, 1, 1);
glNormal3f (0.0f, 0.0f, 1.0f); glVertex3f (1, -1, 1);
glNormal3f (0.0f, 0.0f, 1.0f); glVertex3f (-1, -1, 1);
glNormal3f (0.0f, 0.0f, 1.0f); glVertex3f (-1, 1, 1);

// bottom
glNormal3f (0.0f, 0.0f, -1.0f); glVertex3f (1, 1, -1);
glNormal3f (0.0f, 0.0f, -1.0f); glVertex3f (-1, 1, -1);
glNormal3f (0.0f, 0.0f, -1.0f); glVertex3f (-1, -1, -1);
glNormal3f (0.0f, 0.0f, -1.0f); glVertex3f (1, -1, -1);

// front
glNormal3f (1.0f, 0.0f, 0.0f); glVertex3f (1, 1, -1);
glNormal3f (1.0f, 0.0f, 0.0f); glVertex3f (1, -1, -1);
glNormal3f (1.0f, 0.0f, 0.0f); glVertex3f (1, -1, 1);
glNormal3f (1.0f, 0.0f, 0.0f); glVertex3f (1, 1, 1);

// back
glNormal3f (-1.0f, 0.0f, 0.0f); glVertex3f (-1, 1, -1);
glNormal3f (-1.0f, 0.0f, 0.0f); glVertex3f (-1, 1, 1);
glNormal3f (-1.0f, 0.0f, 0.0f); glVertex3f (-1, -1, 1);
glNormal3f (-1.0f, 0.0f, 0.0f); glVertex3f (-1, -1, -1);

// right
glNormal3f (0.0f, 1.0f, 0.0f); glVertex3f (-1, 1, -1);
glNormal3f (0.0f, 1.0f, 0.0f); glVertex3f (1, 1, -1);
glNormal3f (0.0f, 1.0f, 0.0f); glVertex3f (1, 1, 1);
glNormal3f (0.0f, 1.0f, 0.0f); glVertex3f (-1, 1, 1);

// left
glNormal3f (0.0f, -1.0f, 0.0f); glVertex3f (-1, -1, -1);
glNormal3f (0.0f, -1.0f, 0.0f); glVertex3f (-1, -1, 1);
glNormal3f (0.0f, -1.0f, 0.0f); glVertex3f (1, -1, 1);
glNormal3f (0.0f, -1.0f, 0.0f); glVertex3f (1, -1, -1);

glEnd ();

Однако, как вы можете видеть на изображении ниже, мой куб (справа) закрашен плоско, тогда как другой куб, созданный непосредственно в Maya (слева), закрашен правильно. введите описание изображения здесьЕсть идеи, что мне нужно изменить в моем коде OpenGL, чтобы получить правильное затенение?


person Laurent Crivello    schedule 16.07.2015    source источник
comment
Я думаю, что это не плоское затенение, оно вообще не затенено. Кажется, куб не получает информацию об огнях   -  person Ale_32    schedule 16.07.2015
comment
Любая идея, что я должен добавить в свой код, чтобы получить эту световую информацию?   -  person Laurent Crivello    schedule 16.07.2015


Ответы (1)


Прежде всего, вы должны включить молнию, вызвав glEnable(GL_LIGHTING). Затем вы включаете источник света с glEnable(GL_LIGHT0), это первый источник света с индексом 0, но у вас есть 8 слотов, выберите нужный источник света, не очень важно какой. Затем можно задать диффузный цвет источника света: glLightfv(GL_LIGHT0, GL_DIFFUSE, { 0.8f, 0.8f, 0.8f, 1.0f} ), здесь это вполне белый цвет, может быть светло-серый. Если бы у вас был, например, цилиндр, я бы сказал, что вы можете выбрать плоское затенение и плавное затенение, но поскольку у вас есть куб, это то же самое. И, кстати, к кубу слева применена плоская заливка, а куб справа вообще не закрашен, он везде одного цвета и поэтому цвет вообще не зависит от нормали к поверхности.

person 3Ducker    schedule 16.07.2015