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

how to apply lighting to .obj file on pyopengl

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

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

在我实施照明之前不会出现此行为 基于此

这就是我对照明实施所做的工作

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, 1, 0)) 
    glLightfv(GL_LIGHT0, GL_AMBIENT, (0, 0, 0, 1))
    glLightfv(GL_LIGHT0, GL_DIFFUSE, (2, 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)