如何将光照应用于pyopengl上的.obj文件

问题描述

我用中心的.obj文件中的对象实现了arcball 当我尝试实现照明时,对象显示出奇怪的行为

initial state

当我稍微转动物体时,物体解构并突然露出背面

object deconstruct

show back side

在我实施照明之前不会出现这种现象 基于此How to correctly add a light to make object get a better view with pygame and pyopengl

这是我针对照明障碍所做的

if __name__ == "__main__":
    pygame.init()
    display = (SCREEN_WIDTH,SCREEN_HEIGHT)
    screen = pygame.display.set_mode(display,DOUBLEBUF|OPENGL)

    glMatrixMode( GL_PROJECTION );
    gluPerspective(45,(display[0]/display[1]),0.1,30000.0)

    glTranslatef(0.0,0.0,-250)

    glLight(GL_LIGHT0,GL_POSITION,(1,1,0)) 
    glLightfv(GL_LIGHT0,GL_AMBIENT,(0,1))
    glLightfv(GL_LIGHT0,GL_DIFFUSE,(2,2,1))
    
    while True:
        mouse_pos = pygame.mouse.get_pos()

        glMatrixMode( GL_MODELVIEW )
        glLoadIdentity()

        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)

        glEnable(GL_LIGHTING)
        glEnable(GL_LIGHT0)
        glEnable(GL_COLOR_MATERIAL)
        glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE )

        object1.draw()

        gldisable(GL_LIGHT0)
        gldisable(GL_LIGHTING)
        gldisable(GL_COLOR_MATERIAL)

        pygame.display.flip()
        pygame.time.wait(10)

解决方法

您必须启用Depth Test。在应用程序循环之前启用深度测试:

glEnable(GL_DEPTH_TEST)