Files
PyRenderEngine/engine/light.py
Exil Productions fb3b098299 Engine Code
2025-04-07 22:07:52 +02:00

65 lines
2.7 KiB
Python

import numpy as np
class Light:
def __init__(self, ambient, diffuse, specular):
self.ambient = ambient
self.diffuse = diffuse
self.specular = specular
def apply(self, shader, index):
pass
#here comes the sun duh duh duh duh
class DirectionalLight(Light):
def __init__(self, direction, ambient, diffuse, specular):
super().__init__(ambient, diffuse, specular)
self.direction = direction
def apply(self, shader, index):
shader.set_vec3(f"dirLight.direction", self.direction)
shader.set_vec3(f"dirLight.ambient", self.ambient)
shader.set_vec3(f"dirLight.diffuse", self.diffuse)
shader.set_vec3(f"dirLight.specular", self.specular)
#point light implementation
class PointLight(Light):
def __init__(self, position, ambient, diffuse, specular, constant, linear, quadratic):
super().__init__(ambient, diffuse, specular)
self.position = position
self.constant = constant
self.linear = linear
self.quadratic = quadratic
def apply(self, shader, index):
shader.set_vec3(f"pointLights[{index}].position", self.position)
shader.set_vec3(f"pointLights[{index}].ambient", self.ambient)
shader.set_vec3(f"pointLights[{index}].diffuse", self.diffuse)
shader.set_vec3(f"pointLights[{index}].specular", self.specular)
shader.set_float(f"pointLights[{index}].constant", self.constant)
shader.set_float(f"pointLights[{index}].linear", self.linear)
shader.set_float(f"pointLights[{index}].quadratic", self.quadratic)
class SpotLight(Light):
def __init__(self, position, direction, ambient, diffuse, specular,
constant, linear, quadratic, cut_off, outer_cut_off):
super().__init__(ambient, diffuse, specular)
self.position = position
self.direction = direction
self.constant = constant
self.linear = linear
self.quadratic = quadratic
self.cut_off = cut_off
self.outer_cut_off = outer_cut_off
def apply(self, shader, index):
shader.set_vec3(f"spotLight.position", self.position)
shader.set_vec3(f"spotLight.direction", self.direction)
shader.set_vec3(f"spotLight.ambient", self.ambient)
shader.set_vec3(f"spotLight.diffuse", self.diffuse)
shader.set_vec3(f"spotLight.specular", self.specular)
shader.set_float(f"spotLight.constant", self.constant)
shader.set_float(f"spotLight.linear", self.linear)
shader.set_float(f"spotLight.quadratic", self.quadratic)
shader.set_float(f"spotLight.cutOff", self.cut_off)
shader.set_float(f"spotLight.outerCutOff", self.outer_cut_off)