2 Attachment(s)

Wireframe 3D engine problem

hi,

i coded a small wireframe engine, but i am having some problems with more complex forms, like toroids.

with simple forms, like cubes and piramids, there are no problem.

but with the toroid, it get distorted at certain angles. i calculate the toroid as follow:

Code:

`#define DegToRad 0.017453293f`

//create toroidal object

toroide=create_object();

int c=0;

//walk in 45 degrees steps

for(int j=0;j<360;j+=45)

{

//calculate circle position relative to toroid body

float xx=sin(j*DegToRad)*20;

float yy=cos(j*DegToRad)*20;

//walk in 20 degrees steps

for(int i=0;i<360;i+=20)

{

//build toroidal face

float x=sin(i*DegToRad)*100;

float y=cos(i*DegToRad)*100;

add_vector(toroide,x,y+yy,xx);

}

//link the vectors generated in step above, forming a a circular poligon

for(int i=1;i<=360/20;++i)

{

add_line(toroide,c+i,((i==360/20)?c+1:c+i+1));

}

c+=360/20;

//generate next toroid face

}

//link each face to others faces

for(int i=1;i<=360/20;++i)

{

int s=i;

//vector 1 is linked to vector 1+(number of vectors in face * face), till form a ring

for(int j=1;j<=360/20;++j)

{

int r=(j==360/20)?i:i+(j*(360/20));

add_line(toroide,s,r);

s=r;

}

}

the problem, seens to me, is in the xx and yy calculation. but also can be in my vector_to_2d() function.

Code:

`void vector_to_2d(float x,float y,float z,DWORD *x0,DWORD *y0)`

{

*x0=(DWORD)((MAX_X/2)+(x*((MAX_Z/2)/((MAX_Z/2)-z))));

*y0=(DWORD)((MAX_Y/2)+(y*((MAX_Z/2)/((MAX_Z/2)-z))));

}

my MAX_X and MAX_Y are 640 and 480, respectively. as MAX_Z, i tried several values, ending with 500. all values for MAX_Z show the distortion problem, but with 500 the problem is smaller.

i dunno, but maybe the MAX_Z distortion is not related to my main distortion problem, but only a effect of perspective.

below i attach 2 pictures: 1 angle where it look right, and other wrong.

any suggestion in how correct the problem?

jmgk

ps: sorry for my bad english: i fell it is a barrier to describe my problem and my algo :-(