mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-16 08:02:36 +00:00
Added them lights, relative speed!
This commit is contained in:
56
lib/objects/light.rb
Normal file
56
lib/objects/light.rb
Normal file
@@ -0,0 +1,56 @@
|
||||
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
|
||||
Reference in New Issue
Block a user