【问题标题】:Inconsistency of shading in polygons on the same axis in OpenGLOpenGL中同一轴上的多边形着色不一致
【发布时间】:2014-04-02 13:33:18
【问题描述】:

我正在用 OpenGL 建房子。在外面和里面有门或窗的地方,我用一个四边形在房子周围的窗户上下移动,然后用一个四边形来填补窗户之间的空隙。这些将具有相同的平面值,但由于某些原因 GL_LIGHT 将阴影传递到某些上。有什么线索吗?

窗口之间的四边形

glBegin(GL_QUADS);
    glTexCoord2d(0, 0);glVertex3d(0, 1.1, 0);
    glTexCoord2d(2, 0);glVertex3d(0, 1.1, 2);
    glTexCoord2d(2, 1.6);glVertex3d(0, 2.7, 2);
    glTexCoord2d(0, 1.6);glVertex3d(0, 2.7, 0);
    glEnd();

窗下

glBegin(GL_QUADS);
    glTexCoord2d(0, 0);glVertex3d(0, 0.1, 0);
    glTexCoord2d(15, 0);glVertex3d(0, 0.1, 15);
    glTexCoord2d(15, 1);glVertex3d(0, 1.1, 15);
    glTexCoord2d(0.0, 1);glVertex3d(0, 1.1, 0);
    glEnd();

窗户上方

glBegin(GL_QUADS);
    glTexCoord2d(0, 2.6);glVertex3d(0, 2.7, 0);
    glTexCoord2d(15, 2.6);glVertex3d(0, 2.7, 15);
    glTexCoord2d(15, 3.0);glVertex3d(0, 3.1, 15);
    glTexCoord2d(0.0,3.0);glVertex3d(0, 3.1, 0);
    glEnd();

这是灯的代码

GLfloat light_position[] = { 50, 50, -1.0};
    GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
    GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };
    GLfloat ambient[] = { 1.0, 1.0, 1.0, 1.0 };

    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_LIGHT1);
    glEnable(GL_NORMALIZE);
    glLightfv(GL_LIGHT0, GL_POSITION , light_position );
    glLightfv(GL_LIGHT0, GL_SPECULAR , specular);
    glLightfv(GL_LIGHT0, GL_DIFFUSE , diffuse );
    glLightfv(GL_LIGHT0, GL_AMBIENT , ambient );

这是结果的截图 http://imgur.com/WsgZWBF

为什么会这样,有什么办法可以解决吗?

【问题讨论】:

  • 你在哪里指定你的面/顶点法线?

标签: opengl textures shadow lighting


【解决方案1】:

您需要提供(有意义的)顶点/面法线以使 OpenGL 的光照正常工作:

18.020 Why are my objects all one flat color and not shaded and illuminated?

当您未能在每个顶点处提供法线时,就会出现这种效果。

OpenGL 需要法线来计算光照方程,它不会为您计算法线(评估器除外)。 如果您的应用程序不调用 glNormal*(),那么它会在每个顶点使用 (0.0, 0.0, 1.0) 的默认法线。 然后 OpenGL 将计算相同或几乎相同的光照每个顶点的结果。这将导致您的模型看起来平坦且缺乏阴影。

解决方案是简单地计算需要在任何给定顶点指定的法线。然后在指定与法线关联的顶点之前调用 glNormal3f() 将它们发送到 OpenGL。

【讨论】:

  • 我想我的问题可能标题不正确。我的多边形确实有阴影,它只是与同一轴上的其他多边形不一致。这处理阴影的不一致?如果每个顶点的法线都是默认的,那么不是所有顶点都具有相同的法线 (0,0,1) ,因此具有相同的阴影吗?
猜你喜欢
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多