带有对象旋转的 OpenGL 光
OpenGL light with object rotation
我正在尝试用简单的光旋转十二面体。
显示函数中的代码是这样的:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5f);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.75f);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.4);
GLfloat black[] = { 0, 0, 0, 1 };
GLfloat blue[] = { 0, 1, 1, 1 };
glLightfv(GL_LIGHT1, GL_AMBIENT, black);
glLightfv(GL_LIGHT1, GL_DIFFUSE, blue);
glLightfv(GL_LIGHT1, GL_SPECULAR, blue);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHTING);
glTranslatef(0, 0, -50);
glRotatef(angle, 0, 1.0, 0);
glutSolidDodecahedron();
angle
方向键改变。但是有些角度,图片看起来很奇怪是这样的:
经过多次旋转后,它看起来像这样:
后面的脸好像是透明的。这是为什么?我怎样才能正确打印这个对象?
编辑: 解决方案是通过 glEnable(GL_CULL_FACE)
启用背面剔除。如果您不想看到对象内部,您可能需要验证对象的多边形是否使用正确的缠绕顺序定义,并确保设置了背面剔除 (glCullFace(GL_BACK_FACE)
)。
原回答:
光线没有接触到物体的另一侧,您的环境光设置为黑色:
GLfloat black[] = { 0, 0, 0, 1 };
glLightfv(GL_LIGHT1, GL_AMBIENT, black);
尝试将环境光设置为深灰色,以大致近似于 global illumination:
的环境光贡献
GLfloat ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
我正在尝试用简单的光旋转十二面体。
显示函数中的代码是这样的:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.5f);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.75f);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.4);
GLfloat black[] = { 0, 0, 0, 1 };
GLfloat blue[] = { 0, 1, 1, 1 };
glLightfv(GL_LIGHT1, GL_AMBIENT, black);
glLightfv(GL_LIGHT1, GL_DIFFUSE, blue);
glLightfv(GL_LIGHT1, GL_SPECULAR, blue);
glEnable(GL_LIGHT1);
glEnable(GL_LIGHTING);
glTranslatef(0, 0, -50);
glRotatef(angle, 0, 1.0, 0);
glutSolidDodecahedron();
angle
方向键改变。但是有些角度,图片看起来很奇怪是这样的:
经过多次旋转后,它看起来像这样:
后面的脸好像是透明的。这是为什么?我怎样才能正确打印这个对象?
编辑: 解决方案是通过 glEnable(GL_CULL_FACE)
启用背面剔除。如果您不想看到对象内部,您可能需要验证对象的多边形是否使用正确的缠绕顺序定义,并确保设置了背面剔除 (glCullFace(GL_BACK_FACE)
)。
原回答:
光线没有接触到物体的另一侧,您的环境光设置为黑色:
GLfloat black[] = { 0, 0, 0, 1 };
glLightfv(GL_LIGHT1, GL_AMBIENT, black);
尝试将环境光设置为深灰色,以大致近似于 global illumination:
的环境光贡献 GLfloat ambient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);