|
[A5] lighting |
bleepBlop
Member #14,822
January 2013
|
I am trying to create the ability to have lighting in my games. I first wanted to have ones which would cast a certain shadow on objects, or just not to execute if entering the pixels of an object, but atm I'd be happy with even a simple light and no other rules. I tried making a transparent sphere, but the edges would need to be blurred and I don't know how to do it. Basically, I'm studying java for a year now, made a simple snake-like game in c++/allegro a year ago and now I am trying to do something more complicated with this. I don't know how the community here is relating to newbies but please, if you have nothing constructive to add, just don't bother, I already feel bad about not figuring this out by myself. Thank you for reading this |
Kris Asick
Member #1,424
July 2001
|
One of the key things of note with Allegro 5, and probably one of the reasons why you're running into trouble, is that A5 originally did not support multiplication blending on its own, which is somewhat necessary to make a good lightning system for a 2D game, so you have three options: 1. The best approach that would provide the strongest framerate would be to write a fragment shader that could do the lighting for you, by giving it a source texture with all your light details on it and blending it with the overall scene prior to drawing it all to the screen. 2. If you want to avoid fragment shaders for whatever reason, A5 does support subtractive blending, which does indeed work in making a lighting engine, so long as you keep in mind that the texture that will act as your lighting needs to be inverted. (Black = Full Brightness, White = Total Darkness, Red = Cyan, Blue = Yellow, etc.) 3. You can trick more recent versions of A5 into doing multiplication blending by doing something like this, which is mentioned in the manual: al_set_blender(ALLEGRO_ADD, ALLEGRO_DEST_COLOR, ALLEGRO_ZERO); As for your mishap with the gaussian blur, you need to remember to engage blending modes using al_set_blender() and you also need to make sure you are blurring across the alpha channel with your graphics software, instead of doing the blur on the main RGB colour channels, since when working with 32-bit colour you want transparent parts of your images to have an alpha of 0.0, and the visible parts to have an alpha of 1.0 (or 255, depending on if the channel is described in floating point or as a byte value.) --- Kris Asick (Gemini) |
Edgar Reynaldo
Major Reynaldo
May 2007
|
I can think of a couple ways to achieve lighting. Option A) Option B) My Website! | EAGLE GUI Library Demos | My Deviant Art Gallery | Spiraloid Preview | A4 FontMaker | Skyline! (Missile Defense) Eagle and Allegro 5 binaries | Older Allegro 4 and 5 binaries | Allegro 5 compile guide |
bleepBlop
Member #14,822
January 2013
|
I don t know what a fragmented shader is, or a lightmap, as I said I have only done java and very very simple allegro game. 1void makeCircleLight(Player &player)
2{
3 float r = 1.0f;
4float g = 1.0f;
5float b = 0.0f;
6float a = 0.03f;
7int size = 125;
8 for(int i = 0; i < 30; i++)
9 {
10 al_draw_filled_circle(player.x, player.y, size, al_map_rgba_f(r*a , g*a , b*a , a));
11 if(i < 6)
12 {
13 size -= (rand() % 7) + 3;
14 }
15 else
16 size -= (rand() % 4) + 1;
17 }
18
19}
If anyone can find any use for it, I'd be very happy. I also would like to ask if it is possible to somehow tell the circle not to draw where the pixels of another object are. I tried doing the same with pixels, drawing their alpha less and less the furtherer away they would be from the origin, however it would be too slow to draw hundred of pixels then to just draw 30 circles constantly of different sizes. |
Kris Asick
Member #1,424
July 2001
|
Dynamic lighting which reacts to the state of the world around you is typically a difficult thing to do, both in 2D and 3D. Even expert game programmers can struggle with it sometimes. Thus if you're very new to it then there's little we can do to help you get going other than suggest what pieces of Allegro to use, since no one's gonna spend days on end writing a lighting engine for you. (Unless you pay them to of course.) There's a bunch of tutorials online if you look for them and when you see how in-depth they are you'll understand why it's not something we can just give you little pieces of info about and make it magically work. We can guide you down the right path of what pieces of Allegro to use, but you still need to know the fundamental concepts as most of us aren't teachers. --- Kris Asick (Gemini) |
bleepBlop
Member #14,822
January 2013
|
sorry I did not expect it was so hard to do that, I simply can't find any tutorials even on doing something as basic as what I did with my little piece of code. At the moment, the light I make is enough for my needs with a bit of fixes but if there is anyway for you guys to give me some examples of the tools I need to use in usage, even for something else. Or if you could name them in a way in which I could actually find them, not the name you guys know them by but actually how they are called, that would be great. Sorry for being a nuissance:( |
Kris Asick
Member #1,424
July 2001
|
Could be worse. You could've come on here asking us flat out to make a lighting system for you. Here's a link you should read that will help you understand the concepts behind this: http://elysianshadows.com/phpBB3/viewtopic.php?f=13&t=5439 Following this, just search Google for "2D lighting tutorial" and you'll find stuff. You won't find Allegro-specific stuff, but then you can apply the concepts you learn the Allegro's methodology. --- Kris Asick (Gemini) |
bleepBlop
Member #14,822
January 2013
|
Thank you very much, the link is extremely useful. |
|