【问题标题】:Drawing in OpenGL is always white在 OpenGL 中绘图始终是白色的
【发布时间】:2014-06-27 12:12:45
【问题描述】:

我正在尝试在 OpenGL 中绘制一些简单的三角形。 问题是我的三角形总是白色的,而我用 glColor3f 函数添加了一些颜色:

def OnDraw(self):

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glClearColor(.1, 0.1, 0.1, 1.0)

    glBegin (GL_TRIANGLES)
    glColor3f (1.0, 0.0, 0.0)
    glVertex2f (0.25, 0.25)
    glColor3f (0.0, 1.0, 0.0)
    glVertex2f (0.12, 0.25)
    glColor3f (0.0, 0.0, 1.0)
    glVertex2f (0.25, 0.4)
    glEnd()

这是我的初始化:

def InitGL(self):
    # set viewing projection
    glMatrixMode(GL_PROJECTION)
    glFrustum(-0.5, 0.5, -0.5, 0.5, 1.0, 3.0)

    # position viewer
    glMatrixMode(GL_MODELVIEW)
    glTranslatef(0.0, 0.0, -2.0)

    glEnable(GL_DEPTH_TEST)
    glEnable(GL_LIGHTING)
    glEnable(GL_LIGHT0)

有什么想法吗?

【问题讨论】:

    标签: python opengl


    【解决方案1】:

    启用光照后,计算不再考虑顶点颜色。相反,您必须设置材料属性。但是顶点颜色非常方便,所以有一种方法可以使用顶点颜色来设置材质属性。

    glEnable(GL_COLOR_MATERIAL);
    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    

    但是请注意,要使照明正常工作,您必须提供顶点法线,否则事情会看起来很奇怪。最好暂时禁用照明。

    换个说法:请停止使用陈旧且尘土飞扬的即时模式、固定功能管道 OpenGL。 而是学习现代 OpenGL。我推荐http://arcsynthesis.org/gltut 作为开始。

    【讨论】:

    • 感谢 datenwold。很好的链接!
    【解决方案2】:

    我解决了我删除的问题: glEnable(GL_DEPTH_TEST) glEnable(GL_LIGHTING) glEnable(GL_LIGHT0)

    有人可以解释一下为什么它现在可以工作吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多