Archived

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

generating fire effect palettes?

This topic is 5402 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

Hi, I couldn''t decide whether to post this here on in the beginner''s section, cause it''s most probably not hard at all. I have just finished coding a 2D fire effect, and I need a good palette for it to look good. Since recently begun working with palettes I''m not that good on manipulating colors, so I came here. I want to create a 256 color look-up table, where 0 (black) is cold and 255 (white) represent very hot. In between I want a spectrum from red to yellow. I never were any good at painting and mixing colors as you can see, so I need some help setting up the look-up table init code (a 256 byte char array). Thanks!

Share this post


Link to post
Share on other sites
It sounds like you want a palette representing blackbody emmission (the thing that goes from black to red to yellow to white). This palette is based on the color of iron as it is heated.

I know that Photoshop has a built-in blackbody palette; you could export it from there. Alternatively, google for some info about blackbody radiation and build your own. Alternatively, just fake your own by dividing the palette into 3 pieces and giving each a gradient.


But... but that''s what HITLER would say!!

Share this post


Link to post
Share on other sites
this might do it (my syntax may be off):


    
byte pallete[256][3];
int divide = 255/3;

//black to red

for(int i = 0; i < divide; i++) {
palette[i][0] = i*3;
palette[i][1] = 0;
palette[i][2] = 0;
}
// red to yellow

for(int i = divide; i < divide * 2; i++) {
palette[i][0] = 255;
palette[i][1] = (i-divide)*3;
palette[i][2] = 0;
}

//yellow to white

for(int i = (divide*2); i < 256; i++) {
palette[i][0] = 255;
palette[i][1] = 255;
palette[i][2] = (i - (divide *2))*3
}


and no i did not test this, but it seems right, i know the array is 256 x3, but i dont see how you can get the color red or yellow or anything for that matter in only one byte. Perhaps i do not understand palettes at all in which case you can ignore this. Otherwise,given an index 0-255, you will get black->red->yellow->white from the above.
[/source]

[edited by - mstein on March 4, 2003 12:59:05 PM]

Share this post


Link to post
Share on other sites
Yes, you are right - it''s a 256*3 array. Thanks for giving me the algorithm! I will try it out right away! Blackbody emission sounds really interesting, I will take a look at that as well! I will go for the fake for a start, but I will look into the blackbody emission for sure! I will check back here a bit later to see if someone else comes here to share their knowledge!

Share this post


Link to post
Share on other sites