Java-Gaming.org Hi !
 Featured games (84) games approved by the League of Dukes Games in Showcase (565) Games in Android Showcase (151) games submitted by our members Games in WIP (605) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
 Home Help Search Login Register
Pages: [1]
 ignore  |  Print
 Per-pixel lighting (NO SHADERS!)  (Read 1768 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: 352
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.
 Games published by our own members! Check 'em out!
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 »

Yep. GLSL will make your life a whole lot easier. But, just to answer your question:

 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.

 theagentd (11 views) 2015-03-27 23:08:20 wxwsk8er (52 views) 2015-03-20 15:39:46 Fairy Tailz (46 views) 2015-03-15 21:52:20 Olo (28 views) 2015-03-13 17:51:59 Olo (30 views) 2015-03-13 17:50:51 Olo (37 views) 2015-03-13 17:50:16 Olo (43 views) 2015-03-13 17:47:07 ClaasJG (40 views) 2015-03-10 11:36:42 ClaasJG (41 views) 2015-03-10 11:33:01 Pippogeek (47 views) 2015-03-05 14:36:23
 LiquidNitrogen 23x BurntPizza 21x KevinWorkman 21x basil_ 21x EgonOlsen 17x theagentd 16x Roquen 16x princec 12x Riven 12x Varkas 10x SHC 9x Ashedragon 8x NegativeZero 8x Ecumene 7x nsigma 7x wessles 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