Home Products Download Order Contacts

comp.graphics.algorithms

Subject: Understanding raytracing code



Hi,
I'm reading an old tutorial about demomaking, at flipcode.
And I'm having problem understanding this raytracing thing.
I have typed this from the sourcecode that was available and
I wonder if someone could help me explain how this code work?

This code will generate a "hole" that is mapped with a texture.
The resolution is 320x200. And I see that the code loops through
every pixel, and calculates some map that will be stored in
textcoord. But I don't understand how the hole is created. So
I would really appreciate if someone could explain this for me.
Thanks!

textcoord = new (unsigned char)[128000];
long offs = 0;
for (int j=-100; j<100; j++) {
for (int i=-160; i<160; i++) {
float dx = (float)i / 200;
float dy = (float)-j / 200;
float dz = 1;

// normalize them
float d = 20 / sqrt(dx*dx + dy*dy + 1);
dx *= d;
dy *= d;
dz *= d;
// start interpolation at origin
float x = 0;
float y = 0;
float z = 0;
// set original precision
d = 16;
// interpolate along ray
while (d>0) {
// continue until we hit a wall
while (((x-get_x_pos(z))*(x-get_x_pos(z))+(y-get_y_pos(z))*
(y-get_y_pos(z)) < get_radius(z)) && (z<1024)) {
x += dx;
y += dy;
z += dz;
}
// reduce precision and reverse direction
x -= dx; dx /= 2;
y -= dy; dy /= 2;
z -= dz; dz /= 2;
d -= 1;
}
// calculate the texture coordinates
x -= get_x_pos(z);
y -= get_y_pos(z);
float ang = atan2(y, x) * 256 / M_PI;
unsigned char u = (unsigned char)ang;
unsigned char v = (unsigned char)z;
// store texture coordinates
textcoord[offs] = u;
textcoord[offs+1] = v;
offs += 2;
}

float get_radius(float f)
{
return 128;
}

float get_y_pos(float f)
{
return - 16 * sin(f * M_PI / 256);
}

float get_x_pos(float f)
{
return - 16 * sin(f * M_PI / 256);
}

Reply


View All Messages in comp.graphics.algorithms

path:


Replies:
Re: Understanding raytracing code

Copyright 2006 WatermarkFactory.com. All Rights Reserved.