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