-- Sky -- Sky_sphere version 0.1 © Luis Gomes http://www.lightning-generator.fr.st -- Please note, only one and the last declared sky_sphere is active in Pov-ray Sky={} function Sky:init() self.gradientx=nil self.gradienty=nil self.gradientz=1 self.redB=0.7 self.greenB=0.7 self.blueB=1 self.redT=0.000 self.greenT=0.000 self.blueT=0.5 end function Sky:destroy() end function Sky:load(stream) stream:readByte() self.gradientx=stream:readBoolean() self.gradienty=stream:readBoolean() self.gradientz=stream:readBoolean() self.redB=stream:readDouble() self.greenB=stream:readDouble() self.blueB=stream:readDouble() self.redT=stream:readDouble() self.greenT=stream:readDouble() self.blueT=stream:readDouble() end function Sky:save(stream) stream:writeByte(1) stream:writeBoolean(self.gradientx) stream:writeBoolean(self.gradienty) stream:writeBoolean(self.gradientz) stream:writeDouble(self.redB) stream:writeDouble(self.greenB) stream:writeDouble(self.blueB) stream:writeDouble(self.redT) stream:writeDouble(self.greenT) stream:writeDouble(self.blueT) end function Sky:getProperties() return "Sky", "9574D141B8F0C0F7", "FFFFFFFFFFFFFFFF".. "EEEEEEEEEEEEEEEE".. "DDDDDDDDDDDDDDDD".. "CCCCCCCCCCCCCCCC".. "BBBBBBBBBBBBBBBB".. "AAAAAAAAAAAAAAAA".. "9999999999999999".. "8888888888888888".. "7777777777777777".. "6666666666666666".. "5555555555555555".. "4444444444444444".. "3333333333333333".. "2222222222222222".. "1111111111111111".. "0000000000000000" end function Sky:getDialog(dialog) dialog:addSeparator("Gradient") self.gradientxID=dialog:addRadioButton("X",self.gradientx) self.gradientyID=dialog:addRadioButton("Y",self.gradienty) self.gradientzID=dialog:addRadioButton("Z",self.gradientz) dialog:addSeparator("Pigment Base [0.0]") self.redBID=dialog:addEditBox("red",self.redB,0,1,3) self.greenBID=dialog:addEditBox("green",self.greenB,0,1,3) self.blueBID=dialog:addEditBox("blue",self.blueB,0,1,3) dialog:addSeparator("Pigment Top [1.0]") self.redTID=dialog:addEditBox("red",self.redT,0,1,3) self.greenTID=dialog:addEditBox("green",self.greenT,0,1,3) self.blueTID=dialog:addEditBox("blue",self.blueT,0,1,3) end function Sky:valueChanged(id,value) if id==self.gradientxID then self.gradientx=value self.gradienty=nil self.gradientz=nil self:redraw() end if id==self.gradientyID then self.gradientx=nil self.gradienty=value self.gradientz=nil self:redraw() end if id==self.gradientzID then self.gradientx=nil self.gradienty=nil self.gradientz=value self:redraw() end if id==self.redBID then self.redB=value end if id==self.greenBID then self.greenB=value end if id==self.blueBID then self.blueB=value end if id==self.redTID then self.redT=value end if id==self.greenTID then self.greenT=value end if id==self.blueTID then self.blueT=value end scene:invalidate() end function Sky:getInside(x,y,z) return nil end function Sky:wireframe(wire) wire:sphere(0,0,0,1000000) end function Sky:toPOV(pov) pov:write("sky_sphere {") pov:write(" pigment {") if self.gradientx == 1 then pov:write(" gradient x") end if self.gradienty == 1 then pov:write(" gradient y") end if self.gradientz == 1 then pov:write(" gradient z") end pov:write(" color_map {") pov:write(" [0.0 color rgb < "..self.redB.." , "..self.greenB.." , "..self.blueB.." >]") pov:write(" [1.0 color rgb < "..self.redT.." , "..self.greenT.." , "..self.blueT.." >]") pov:write(" }") pov:transforms(self.xforms) pov:write(" }") pov:write("}") end registerClass(Sky,"Sky")