Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

Jonbca

Lighting effects

This topic is 5938 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I''m currently woring on a 2d RPG and due to the language I workwith at my school, I have no support for doing any lighting opperations. I''ve been looking around to see if I could find any algithorims that would show me how do making lights. I had to make up my own in the mean time. If anyone knows any links or can comment on how to optomise my code it would be greatly appreciated.
  
//RGB light colour value

real r1,g1,b1
//objects RGB value

real r2,g2,b2
// new RGB colour

//distance from light source

real distance
//max light range

int maxDistance
//light intensity

real power
//pixels x,y location

int x,y
//lights x,y location

int lightX,lightY

//distance from pixel to light position

distance=sqrt(((lightX-x)**2)+((lightY-y)**2))
//intensity of light between 0-1

power = 1-(distance/maxDistance)

//get the RGB value of the destination pixel

GetColour(xLocation,yLocation,r,g,b)
//make new colour by finding the diff. in values

//taking a percentage of it and adding to the 

//original

r3=((r1-r2)*power)+r2
g3=((g1-g2)*power)+g2
b3=((b1-b2)*power)+b2

drawdot(xLocation,yLocation,r3,g3,b3)
  
This is is incredably slow( 2-3 frames with one light). If anyone has an idea that would be great

Share this post


Link to post
Share on other sites
Advertisement
First of all, what does your code look like without the lighting?

I''m suspecting that the main bottleneck lies with GetColour/DrawDot. Consider using an array for your sprite and for your target and copying the target to the screen every frame. (the implementation will depend on your API)
I''m assuming the Getcolour line should use r2,g2,b2, right?

Secondly, keep your types straight - either do it all in floating point variables (real), or use all integers.

Another good idea is taking out the sqrt() and also using maxdistance squared. Apart from being faster, it''ll also look better.

Depending on how good the compiler is, consider unrolling the (lightx-x)2 to (lightx-x)*(lightx-x).



- hillip@xenoage.de''>JQ
Full Speed Games. Period.

Share this post


Link to post
Share on other sites
Thanks for the tips there Jonny. That sqrt was killing it. I''ve got it work quite a bit faster now (from 2 FPS to 60) with absolutly no changes in the actual way I was implementing it. I''m having a bit of a problem now, where the light is too strong even at the edges. I think it might be a simple error(the type that are really hard to see) so I have to work on that. But thanks, you helped a lot.

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!