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:

the problem, seens to me, is in the xx and yy calculation. but also can be in my vector_to_2d() function.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; } }

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.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)))); }

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 :-(