PDA

View Full Version : projective textures



skynet
08-20-2003, 12:54 PM
Hello!

Im currently trying out projective textures. The main thing, projecting the texture itself worked out to be easy. But I (inspite of most papers/tutorials) I also want to use the (projected) z-coordinate for another texture, in this case in order to achieve falloff-effects. The falloff should be done by looking up the distance in a 1D-texture. For this to work I need a _linear_ mapping from [nearz,farz] to [0,1]. First I tried a standard projection matrix. After some hours of trying I finally convinced myself that the x,y projection is done ok (as expected), but the falloff is MUCH too much. So I placed some test z-values into the matrix. The projected z-values are not equally distributed from 0..1. Which is AFAIK a desired effect for the depthvalues in the depthbuffer.
So my question is: is there a projection matrix that projects x and y perspectivly as usual, but maps z linearly from nearz..farz to 0..1 ?
I know, this post is probably off-topic, sorry for that. But I think here are the most competent users able to answer this question.

SirKnight
08-20-2003, 01:44 PM
I was messing around with some numbers and this seemed to work:

Assuming nearz = 0
Let i : number from [0,farz] you want to convert
Let m : mapped i to [0,1]

m = ( i / (farz/2) ) * 0.5

Now if you can't have nearz at 0 then it will be different.

-SirKnight

skynet
08-20-2003, 01:49 PM
Thanks for your reply, but this is not what I need. I know how to map ranges from one to another. The Problem is, putting this into a projection matrix, where the result is a homogenous vector that undergoes a divide-by-w before being used for sampling the texture.

rgpc
08-20-2003, 04:05 PM
Could you alter your 1D texture so that it scaled non-linearly to remove the effect of a non-linear z range?

Gorg
08-20-2003, 05:02 PM
Why don't use just use a texgen?

skynet
08-21-2003, 02:24 AM
rgpc: this is a good idea, but Id rather leave the texture unchanged. On the hand side you could model the falloff much more detailed for near objects...

gorg: texgen is not an option for me, I use vertex programs. Up to now everything was very convenient, the whole transformation from objectspace into the texturespace of the projected texture could be done in one matrix:
M=bias*scale*projection*world2lightspace*object2wo rldspace

For orthogonal projection this works for all 3 coordinates... It would be sad if Id had to do extra code for each type of projection.

There actually is another option. I can make the fragment program in a way that it doesnt do the divide-by-w for the falloff texture coordinate. I could then setup a linear mapping in the z-row of the projection matrix. But by abandon the division I make the "bias*scale" part not working correctly on the z-axis. Doh!...

anyway, thanks for your suggestions