• Create Account

Member Since 18 Nov 2005
Offline Last Active Yesterday, 10:23 PM

### #4963644Help with Shadow Mapping and Multi-Texturing

Posted by on 27 July 2012 - 08:29 AM

Look up cross product right hand rule. The order of the two vectors matters.

### #4963458Help with Shadow Mapping and Multi-Texturing

Posted by on 26 July 2012 - 04:49 PM

If your quads are supposed to be evenly lit, then you are probably taking the wrong vertices to cross and doing them in the wrong order causing some to be negative.

### #4963362glRotatef behaves strange

Posted by on 26 July 2012 - 10:45 AM

If you hold your hand 45 degrees like the image and put it far left of your head and them move it towards the right, you will see the same thing. On the left your hand is facing you, on the right it is facing away from you and distorted because you are looking down the side of the hand and cant see the front anymore.

### #4963357Help with Shadow Mapping and Multi-Texturing

Posted by on 26 July 2012 - 10:27 AM

The only reason I haven't posted anything, is your pictures are ridiculous. I have no what I am looking at. I know its some terrain but its insane. Get rid of the texturing/tiles if you are just work on the lighting alone.

Tips:
Make a function called Cross product that takes two vectors instead of this.
Result.X = ( A.Y * B.Z ) - ( A.Z * B.Y );
Result.Y = ( A.Z * B.X ) - ( A.X * B.Z );
Result.Z = ( A.X * B.Y ) - ( A.Y * B.X );

It looks like you are only doing face normals instead of blended vertex normals.

### #4963338Cell Shading techniques to consider.

Posted by on 26 July 2012 - 09:55 AM

For direct cell shading control use a 1D texture of all the tones you want. Since dot product is in range 0 to 1, use that as a 1D UV coord into the texture. You can then at any time change from 2 tones to 4,8....and so on.

For outlines it depends how specific you want to outline. There is a case where say a camera is in front of you and you have your hand over your chest. You either want just the silhouette of the entire body, you want to draw outlines around the hand. (The hand is inside the silhoutte of the chest/body).

For just silhouette, draw your model 2x, once with GL_LINES and changing the GL_LINE_WIDTH bigger depending on your outline thickness.
For the second case of all outlines, just take the normal relative to the eye/screen. As it approaches 0, that means the normal is starting to point away from you.
if( dot(normal, vec3(0,0,1) < VALUE)
{
gl_FragColor = black;
}
Where value would be between 0 and maybe .3 depeding on how thick you want it to be.

### #4961951Lighting and glMultMatrixf problem

Posted by on 22 July 2012 - 10:39 AM

Thats because you have the light transformed exactly how your model is. Say your model has normals and lets treat the light as a normal as well.

If you rotate your model (and its normals) then you are rotating the light normal as well. Only call glLightfv() after you have applied the camera matrix only.
Identity()
cameramatrix()
glLight()

Identity()
ObjectMatrix()
Draw()

### #4961868Want to rewrite the pixel buffer

Posted by on 21 July 2012 - 11:19 PM

Dont do that. glRead and glDraw are slow.

Are you just fading to red? Draw a red quad and change the alpha. You can always use a texture with varying red/blood instead of just using pure red.

You have to call glRasterPos and glLoadIdentity to DrawPixels

Posted by on 20 July 2012 - 10:02 AM

Simple way without using a line drawing algorithm like Bresenham:

Create a 2D vector between start and end brush.
Find the length in pixels of that line using pythagorean theorem.
float timeStep = 1.0/length in pixels
float time = 0;
for(int i = 0; i < length in pixels; i++)
{
Vec2 fillPos = start + time*brushvector;
time += timeStep;
}

When time = 1, the fill pos is the endpoint
When time = .5, the fill pos is halfway to the endpoint

Posted by on 19 July 2012 - 08:46 AM

I cant't know where user will be drawing

Based on your drawing you are trying to fill the points between the last brush position and the current. So you know where the user is drawing.

The only way to fix this is to draw a brush for each pixel in between the circles. If you use a distance bigger than that you won't get a brush stroke, you will get more of a caterpillar looking brush, like the medium drawing you posted.

### #4960613Easy OpenGL Directional Lighting Question

Posted by on 18 July 2012 - 01:22 PM

So what I would suggest again, is instead of binding the shadow texture, Bind an image of a tree or anything and see if you can see any of the image at all noticeable.

The Shadow Mapping part works great at the bottom, but the top part seems to be screwing up somehow.

So you have shadows but not lighting? Post a pic.

You mentioned you have a 0 for the w coordinate but you are subtracting light position from world position as if it is a point light.

### #4960588Easy OpenGL Directional Lighting Question

Posted by on 18 July 2012 - 12:27 PM

So you are most likely doing it wrong because shadow mapping does not require a vector to the sun at all, and will have nothing to do with normalizing it either.

When learning shadow mapping, try projecting an image texture instead of a depth buffer, this way you can get the math part down and then just replace the image with a depth buffer, because sometimes you will user a depth buffer that is not what you thought it was.

Posted by on 18 July 2012 - 08:47 AM

So I calculate distance between previous point and current point, and if its bigger than something I need to add more quads to that distance automatically.

Uh.....call your draw function for the space in between each brush...

You know how to draw quads. You know how to draw multiple quads. It sounds like you can draw a few more....

### #4960319Easy OpenGL Directional Lighting Question

Posted by on 17 July 2012 - 09:53 PM

Wouldn't to the west and up (as per my prior description) be (-1,0,1)

yes

Assuming that for whatever reason I had translated to some arbitrary point, making it the center (say, [x, y, z]), the resulting light would require the light direction to be (x -(-1), y, z - 1) => (x + 1, y, z -1), correct?

A light with w = 0, means it is directional and not effected by translation basically 0*translation is what the math comes out to be. If you want a positional light such as a lamp post then yea something like that.

I'm pretty sure the lights position is normalized if you use GL without shaders. The vector 1,0,1 is bigger than 1,0,0. If you don't know the Pythagorean theorem then thats what it is for.

### #4959862Easy OpenGL Directional Lighting Question

Posted by on 16 July 2012 - 10:23 PM

The direction in regards to lights is the direction pointing to the light. Not the direction the rays are coming.

Unless you have a modified coordinate system, openGL y-axis is up.

### #4958822Detect camera inside wall

Posted by on 13 July 2012 - 09:45 AM

This is a physics problem. You don't need to test every triangle but you can generalize things like say a statue as a box.

PARTNERS