# Requesting Ray Tracing Help

This topic is 4153 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Hello, I am new to these forums, and I have joined to get some help with my ray tracer. I started it just recently, and I've found a number of good resources on the internet, which have allowed me to get some very very very basic results (i.e. rendering a sphere in just a flat color). I mainly followed this tutorial: http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtexamp1.htm and it gave me these results: As you can see, the sphere is off-center, even though its origin is (0, 0, 10) and the "camera" is located at (0, 0, -10). The algorithm I used is exactly the same as the one described in the siggraph site (linked above) and I double- and triple-checked my vector math. My code, specifically, is as follows:
double worldx = left,
worldy = top,
dxpp = (right - left) / ((double) width), // change in x per pixel
dypp = (bottom - top) / ((double) height); // change in y per pixel
vector3 orig(0, 0, -10);

for(y = 0; y < height; y ++)
{
worldx = left;
for(x = 0; x < width; x ++)
{
// form direction vector
vector3 dir = vector3(worldx + (.5 + x) * dxpp,
worldy + (.5 + y) * dypp, 0) - orig;

// normalize vector
dir.normalize();

// Make the ray
Ray ray(orig, dir);

for(i = 0; i < numObjects; i ++)
{
if(objects->Intersect(ray) > 0)
{
Color c = objects->getMaterial()->getColor();
DrawPixel(screen, x, y, c.r, c.g, c.b);
}
}

worldx += dxpp;
}
worldy += dypp;
}

When worldx and worldy are (practically) zero, x and y are width/2 and height/2 respectively. That means that it should draw the pixel at the center of the sphere (since the sphere is located at 0, 0, 10) in the center of the screen... but as you can see, such is not the case. I noticed that it's basically scrunching the sphere into half the space both vertically and horizontally, so I tried:
       dxpp = (right - left) / ((double) width * 2), // change in x per pixel
dypp = (bottom - top) / ((double) height * 2); // change in y per pixel

and it fixed the problem... but I don't understand why and it doesn't seem right to me. Also, I seem to have a problem with the perspective. Spheres with origins along the z-axis are OK, but the more it moves away from the z-axis, the more it gets distorted: The tutorials I am following make no mention of this... so I'm not really sure what's going on/how to fix it. Any help is appreciated! -Yoshi

##### Share on other sites
I don't see why you increment worldx and worldy at the end of each loop. Those should stay constant, and only x and y should be changing to indicate the "sweeping" movement of the ray. I imagine your view plane is off-centered too because of your values for left/right/top/bottom.

So for starters, get rid of worldx += dxpp and worldy += dypp. This should eliminate a bunch of problems. Then try view parameters: left = -25, right = 25, top = -25, bottom = 25. These are world-space coordinates, on the Z = 0 plane, so if you center them around the origin then your sphere will appear centered. Also verify that the sphere intersection code is correct.

Let us know if this helps. I might not be able to reply again until Friday but I'm sure another resident math person can help you out.

##### Share on other sites
I think Zipster is right. As for the distortion, it is a normal effect. To reduce this you should change the FOV of the camera.
For a good RT tutorial, see this

1. 1
Rutin
26
2. 2
3. 3
4. 4
JoeJ
18
5. 5

• 14
• 21
• 11
• 11
• 9
• ### Forum Statistics

• Total Topics
631763
• Total Posts
3002186
×