Files
i-mic-fps/lib/objects/light.rb

57 lines
1.5 KiB
Ruby

class IMICFPS
class Light
include OpenGL
MAX_LIGHTS = GL_MAX_LIGHTS-1
attr_accessor :x, :y, :z, :ambient, :diffuse, :specular
def self.number_of_lights
@number_of_lights ||= 0
end
# use as Light.number_of_lights+=n
def self.number_of_lights=(int)
@number_of_lights = int
end
def initialize(x,y,z)
@ambient = [0.0, 0.0, 0.0, 1].pack("f*")
@diffuse = [1, 0.5, 0, 1].pack("f*")
@specular = [0.0, 0.0, 0.0, 1].pack("f*")
@postion = [0, 0, 0, 0].pack("f*")
@light_id = available_light
end
def available_light
raise "Using to many lights, #{Light.number_of_lights}/#{MAX_LIGHTS}" if Light.number_of_lights > MAX_LIGHTS
Light.number_of_lights+=1
puts "OpenGL::GL_LIGHT#{Light.number_of_lights}"
@light_id = Object.const_get "OpenGL::GL_LIGHT#{Light.number_of_lights}"
end
def ambient=(array)
@ambient = array.pack("f*")
end
def diffuse=(array)
@diffuse = array.pack("f*")
end
def specular=(array)
@specular = array.pack("f*")
end
def postion=(array)
@postion = array.pack("f*")
end
def draw
glLightfv(@light_id, GL_AMBIENT, @ambient)
glLightfv(@light_id, GL_DIFFUSE, @diffuse)
glLightfv(@light_id, GL_SPECULAR, @specular)
glLightfv(@light_id, GL_POSITION, @postion)
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1)
glEnable(GL_LIGHTING)
glEnable(@light_id)
end
end
end