PDA

View Full Version : how to generate ray form pixel coords



xcoers
09-10-2008, 10:33 PM
In the ray tracing,it said that generate a ray of per pixel form pixel screen coord.
but how to compute.I cann`t found anywhere introduction for this
thanks! :(

lobbel
09-10-2008, 11:40 PM
A ray , as far as i know, is defined as

r = r0 + s*t

where r0 is a origin vector and t a vector to the destination. I think you can use your camera position as r0 and a destination vector. So you can build a ray r, from r0 to t.

r0 points to the "Point" in space where your ray starts. and t is a point along your ray.

greetings,
lobbel

xcoers
09-11-2008, 04:05 PM
thanks,i know that and my means is how determinate the ray dir("s" in up equation of you wrote) through pixel screen coord.

lobbel
09-12-2008, 12:15 AM
Hi, s is just a point in space. For instance, if you want to send a
ray from your view along your viewing direction you can say that
r0 is the position of your camera and s the point where your camera looks at. If you use glLookAt you can easy imagine.
glLookAt uses 4 vectors (?). The camera position and 3 vectors
that describe the camera's alignment. These are the up vector,
the direction vector and the right vector. The direction vector is build from camera position and the point where you want to look at.
In this case we can say it's also a ray that goes from your camera position to the point where you want to look at.

For example you camera is at (0,5,0) and your point you want to look at is (2,0,2) then your view vector (resp. ray) is
(2,0,2) - (0,5,0) = (2,-5,2)

Btw. s is just a scalar. it can be 1.
greetings,
lobbel

xcoers
09-12-2008, 07:04 PM
In the chapater <<Implementing Ray Tracing on GPU>>
it calculate the primary ray form pixel coord as this:
vec3 raydir(vec2 pixelpos)
{
vec3 direction=_tl+_right*(_pixelsize/2.0)-_upvec*(_pixelsize/2.0);
direction=direction+_right*(pixelpos.x*_pixelsize)-_upvec*(pixelpos.y*_pixelsize);

return direction;
}
vec3 _upvec; // camera: up-vector
vec3 _right; // camera: vector to the right
vec3 _tl; //camera: vector to the "virtual screen" top left
float _pixelsize; // pixel size of the "virtual screen"
float psize; // Size of a pixel in texture coordinates
vec3 camera_pos; // camera position

I not determinate what means of "_right" and "_tl",such as "binormal" and "tangent" in the tangent space?
And why compute as this?
My confused is there`s no pixel position information in your method for ray