Source code for picogl.backend.legacy.core.camera.lighting

"""
Setup lighting
"""

from OpenGL.raw.GL.VERSION.GL_1_0 import (GL_AMBIENT, GL_COLOR_BUFFER_BIT,
                                          GL_DEPTH_BUFFER_BIT, GL_DIFFUSE,
                                          GL_FOG, GL_FOG_COLOR, GL_FOG_END,
                                          GL_FOG_MODE, GL_FOG_START,
                                          GL_FRONT_AND_BACK, GL_LIGHT0,
                                          GL_LIGHT1, GL_LIGHT2, GL_LIGHT3,
                                          GL_LIGHT4, GL_LIGHTING, GL_LINEAR,
                                          GL_MODELVIEW, GL_POSITION,
                                          GL_SHININESS, GL_SPECULAR,
                                          GL_UNPACK_ALIGNMENT, glClear,
                                          glClearColor, glDisable, glEnable,
                                          glFogf, glFogfv, glFogi, glLightfv,
                                          glLoadIdentity, glMaterialf,
                                          glMatrixMode, glPixelStorei,
                                          glPopMatrix, glPushMatrix)


[docs] def set_fog_state( fog_state: bool, fog_density_value: float, fog_start_value: float, fog_end_value: float, ) -> None: """ set_fog_state :param fog_density_value: float :param fog_end_value: float :param fog_start_value: float :param fog_state: bool :return: None """ if fog_start_value >= fog_end_value: fog_start_value = fog_end_value - 1 fog_density_value = min(0.3, fog_density_value) if fog_state: glEnable(GL_FOG) glFogfv( GL_FOG_COLOR, [ fog_density_value, fog_density_value, fog_density_value, fog_density_value, ], ) glFogi(GL_FOG_MODE, GL_LINEAR) glFogf(GL_FOG_START, fog_start_value) glFogf(GL_FOG_END, fog_end_value) else: glDisable(GL_FOG)
[docs] def set_second_light_state(second_light_state: bool) -> None: """ set_second_light_state :param second_light_state: bool Whether the second light is on or off :return: None Second light """ if second_light_state: glEnable(GL_LIGHT1) glLightfv(GL_LIGHT1, GL_POSITION, [-10.0, -10.0, -10.0, 1.0]) glLightfv(GL_LIGHT1, GL_DIFFUSE, [0.5, 0.5, 0.5, 1.0]) glLightfv(GL_LIGHT1, GL_SPECULAR, [0.3, 0.3, 0.3, 1.0]) glEnable(GL_LIGHT2) glLightfv(GL_LIGHT2, GL_POSITION, [90.0, 90.0, 90.0, 1.0]) glLightfv(GL_LIGHT2, GL_DIFFUSE, [0.5, 0.5, 0.5, 1.0]) glLightfv(GL_LIGHT2, GL_SPECULAR, [0.3, 0.3, 0.3, 1.0]) glEnable(GL_LIGHT3) glLightfv(GL_LIGHT3, GL_POSITION, [-90.0, -90.0, -90.0, 1.0]) glLightfv(GL_LIGHT3, GL_DIFFUSE, [0.5, 0.5, 0.5, 1.0]) glLightfv(GL_LIGHT3, GL_SPECULAR, [0.3, 0.3, 0.3, 1.0]) glEnable(GL_LIGHT4) glLightfv(GL_LIGHT4, GL_POSITION, [270.0, 270.0, 270.0, 1.0]) glLightfv(GL_LIGHT4, GL_DIFFUSE, [0.5, 0.5, 0.5, 1.0]) glLightfv(GL_LIGHT4, GL_SPECULAR, [0.3, 0.3, 0.3, 1.0]) else: glDisable(GL_LIGHT1)
[docs] def set_background_color(show_white_background: bool) -> None: """ set_background_color :param show_white_background: bool :return: None Choose bg color_array """ if show_white_background: glClearColor(1.0, 1.0, 1.0, 1.0) # White background glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Black else: glClearColor(0.0, 0.0, 0.0, 1.0)
[docs] def setup_lighting(mode: int = 0) -> None: """ setup_lighting :param mode: int lighting gl_mode :return: None """ current_shininess = 1.0 if mode == 0: glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) # glEnable(GL_COLOR_MATERIAL) # Set up light position_array (in eye space) light_pos = [10.0, 10.0, 10.0, 1.0] # positional black light glLightfv(GL_LIGHT0, GL_POSITION, light_pos) # Set light color_array glLightfv(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 128.0 * current_shininess) glPixelStorei(GL_UNPACK_ALIGNMENT, 1) if mode == 2: glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) # Set up light position_array (in eye space) light_pos = [0.0, 0.0, 0.0, 1.0] # positional light glLightfv(GL_LIGHT0, GL_POSITION, light_pos) # Set light color_array glLightfv(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) elif mode == 1: glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glMatrixMode(GL_MODELVIEW) glPushMatrix() glLoadIdentity() # reset modelview matrix # Set light position_array (camera-relative) light_pos = [10.0, 10.0, 10.0, 1.0] glLightfv(GL_LIGHT0, GL_POSITION, light_pos) glPopMatrix() # Set light properties (these are not affected by the matrix) glLightfv(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) elif mode == 3: glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) # Set light properties (independent of matrix) glLightfv(GL_LIGHT0, GL_DIFFUSE, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_SPECULAR, [1.0, 1.0, 1.0, 1.0]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]) # Call this *after* your model_matrix/view transforms (e.g., after gl_update_camera_matrix) light_pos = [ 10.0, 10.0, 10.0, 1.0, ] # Positional light, relative to object/world glLightfv(GL_LIGHT0, GL_POSITION, light_pos)