Maya 中的 LocatorNode 始终采用平面着色

LocatorNode in Maya always flat shaded

我使用 OpenGL (Viewport 2.0) 在 maya 中创建了一个显示立方体的 LocatorNode,代码如下:

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 代码中更改什么才能获得正确的着色吗?

首先你必须通过调用 glEnable(GL_LIGHTING) 来启用闪电。然后你用 glEnable(GL_LIGHT0) 启用一个光源,它是第一个索引为 0 的灯,但是你有 8 个插槽,选择你想要的灯,哪个并不重要。然后你可以设置光源的漫反射颜色:glLightfv(GL_LIGHT0, GL_DIFFUSE, { 0.8f, 0.8f, 0.8f, 1.0f} ),这里是很白的颜色,也可能是浅灰色。例如,如果你有一个圆柱体,我会说你可以选择平面着色和平滑着色,但因为你有一个立方体,所以它是一样的。顺便说一下,左边的立方体使用了平面着色,右边的立方体根本没有着色,它到处都是相同的颜色,因此颜色根本不依赖于表面法线。