Java-Gaming.org Hi !
 Featured games (84) games approved by the League of Dukes Games in Showcase (575) Games in Android Showcase (154) games submitted by our members Games in WIP (623) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Per-pixel lighting (NO SHADERS!)  (Read 1862 times) 0 Members and 1 Guest are viewing this topic.
JonnyGingerKid

Junior Devvie

Exp: 3 years

 « Posted 2014-04-11 02:31:59 »

Ok guys I recently had the urge to create a per-pixel lighting system. I don't know GLSL (though I want to learn it soon) but I still wanted to do some lighting stuff. I came up with this:

public void renderLight(Vector2f pos /*position of light */){
float transparency = 0, trans1, trans2, trans3, trans4, trans5; //5 levels of lumosity
trans1 = .1f;
trans2 = .2f;
trans3 = .4f;
trans4 = 7f;
trans5 = 1;

for(int x = 0; x < Display.getWidth(); x++){
for(int y = 0; y < Display.getHeight(); y++){

//get distance between current pixel and light source
Vector2f distance, currentPos = new Vector2f(x, y);
currentPos.sub(pos);
distance = new Vector2f(Math.abs(pos.getX() - currentPos.getX()), Math.abs(pos.getY() - currentPos.getY()));

if(distance.getLength() <= 5){
transparency = trans1; //current pixel is 5 pixels away from source

}else if(distance.getLength() <= 10){
transparency = trans2; //current pixel is 10 pixels away from source

}else if(distance.getLength() <= 20){
transparency = trans3; //current pixel is 20 pixels away from source

}else if(distance.getLength() <= 35){
transparency = trans4; //current pixel is 35 pixels away from source

}else if(distance.getLength() >= 50){
transparency = trans5; //current pixel is 50 or more pixels away from source

}

glColor4f(0, 0, 0, transparency);
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();
}
}
}

Pretty simple I know. But I'm really proud of it because I've always thought smooth lighting was impossible without shaders. Now obviously the point of per-pixel lighting is for it to be smooth, and I only have 5 levels of lumosity for each pixel. Also you can't customize the strength of the light. Sure the light doesn't cast a shadow, and this system might be really slow. But what I'm asking here is how to make it more smooth (lumosity fades out gradually instead of having 5 levels) and how to customize the strength of the light. Thanks guys!!!!
HeroesGraveDev

JGO Kernel

Medals: 354
Projects: 11
Exp: 3 years

┬─┬ノ(ಠ_ಠノ)(╯°□°)╯︵ ┻━┻

 « Reply #1 - Posted 2014-04-11 02:40:42 »

Just learn GLSL. It's easier.

Drenius
 « Reply #2 - Posted 2014-04-11 03:05:01 »

Its easier for you and its a lot easier for the program.
JonnyGingerKid

Junior Devvie

Exp: 3 years

 « Reply #3 - Posted 2014-04-11 04:22:34 »

Fine then.... Lol
Longarmx
 « Reply #4 - Posted 2014-04-11 04:29:28 »

 1  2 `float lightStrength = 1.2f;transparency = distance.getLength()/(50f * lightStrength);`

atombrot
 « Reply #5 - Posted 2014-04-11 08:43:23 »

A nice and easy way to do simple per pixel lighting is to create an offscreen texture, render the lights to the offscreen texture (using additive blending) and than multiply this texture with the screen.

Here is how it could look like: https://www.youtube.com/watch?v=0MiVrE5-IhE  You can see that the player pointer and each of the cells emit some light. If many light sources are at the same place, the scene gets lighter, as the light sources add up to eachother (why we use additive blending for the light texture).

I have the idea from a post here (and I think the explanation is much better with the example images as mine): http://www.java-gaming.org/topics/realistic-lighting-in-a-2d-game/20161/view.html

Slyth2727
 « Reply #6 - Posted 2014-04-12 14:11:34 »

When he says offscreen texture he most likely means an FBO. Just clarifying.

Was I before Chuang Tzu who dreamt about being a butterfly, or am I now a butterfly who dreams about being Chuang Tzu?
trollwarrior1
 « Reply #7 - Posted 2014-04-12 14:25:13 »

To people who say just use shaders, you're kinda wrong. The question he posed here is not whether or not to use shaders. If he used shaders, he would still be posting this question.

@OP
Use code tags [.code][./code](Without .) and that what longarmx said.

The way I did my lighting is divide distance by light strength, and then divide the number you get by some kind of constant ( i did 300)

 1 `float light=distance/light.strength/300.0;`
atombrot
 « Reply #8 - Posted 2014-04-12 14:30:59 »

When he says offscreen texture he most likely means an FBO. Just clarifying.

Yeah, that is correct, sir
Plutoniummatt

Senior Newbie

Medals: 1

 « Reply #9 - Posted 2014-04-17 21:02:32 »

I will echo the first two replies, just learn GLSL
Pages: [1]
 ignore  |  Print

You cannot reply to this message, because it is very, very old.

 BurntPizza (27 views) 2015-04-23 03:42:11 theagentd (31 views) 2015-04-22 16:23:07 Riven (45 views) 2015-04-16 10:48:47 Duke0200 (52 views) 2015-04-16 01:59:01 Fairy Tailz (39 views) 2015-04-14 20:13:12 Riven (41 views) 2015-04-12 21:36:37 bus hotdog (58 views) 2015-04-10 02:39:32 CopyableCougar4 (61 views) 2015-04-10 00:51:04 BurntPizza (62 views) 2015-04-06 22:06:58 ags1 (62 views) 2015-04-02 10:58:48
 theagentd 23x BurntPizza 16x wessles 15x kingroka123 11x alwex 11x 65K 11x kevglass 8x phu004 8x Rayvolution 8x Roquen 7x chrislo27 7x Hanksha 7x Riven 7x Olo 7x ra4king 7x Ecumene 7x
 How to: JGO Wikiby Mac702015-02-17 20:56:162D Dynamic Lighting2015-01-01 20:25:42How do I start Java Game Development?by gouessej2014-12-27 19:41:21Resources for WIP gamesby kpars2014-12-18 10:26:14Understanding relations between setOrigin, setScale and setPosition in libGdx2014-10-09 22:35:00Definite guide to supporting multiple device resolutions on Android (2014)2014-10-02 22:36:02List of Learning Resources2014-08-16 10:40:00List of Learning Resources2014-08-05 19:33:27
 java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org