I'm tring to make 3D rotation of a poligon, I wrote my own functions for that.The problem is when I rotate some points in 2D it works but if I use the same functions for 3D , while rotating the veteces move to the center of the object and remain there.
I also wrote the 3D rendering part.
The relevant code is this:

poligon vertex coordonates are stored in "object" array:
object[1][0][4] = 9; // number of vertecies object[1][1][0] = 0; // x of origin object[1][1][1] = 0; // y of origin object[1][1][2] = 150; // z of origin object[1][2][0] = 100; // x of first vertex object[1][2][1] = 100; // y of first vertex object[1][2][2] = 100; // z of first vertex ...

2D rotate functions:
int rotateX(int Ox, int Oy , int Ox2, int Oy2 , float Ub ){
float PI = 3.1415926535897;float hkj = round( sqrt( (abs(Ox  Ox2 ) * abs(Ox  Ox2)) + (abs(Oy  Oy2) * abs(Oy  Oy2)) ) ); if( Ub > 359 ){ Ub = 0; } if( Ub < 0 ){ Ub = 359; } if( ( Ub >=0 ) and ( Ub < 90 ) ){ Ox2 = ( sin((Ub*PI)/180) * hkj ); }else if( ( Ub >=90 ) and ( Ub < 180 ) ){ Ox2 = ( cos(((Ub90)*PI)/180) * hkj ); }else if( ( Ub >=180 ) and ( Ub < 270 ) ){ Ox2 = ( (sin(((Ub180)*PI)/180) * hkj )* 1); }else if( ( Ub >=270 ) and ( Ub < 360 ) ){ Ox2 = ( (cos(((Ub270)*PI)/180) * hkj )* 1 ); }
return Ox2 ;
}int rotateY(int Ox, int Oy , int Ox2, int Oy2 , float Ub ){
float PI = 3.1415926535897932;float hkj = round( sqrt( (abs(Ox  Ox2) * abs(Ox  Ox2)) + (abs(Oy Oy2) * abs(Oy  Oy2)) )); if( Ub > 359 ){ Ub = 0; } if( Ub < 0 ){ Ub = 359; } if( ( Ub >=0 ) and ( Ub < 90 ) ){ Oy2 = cos((Ub*PI)/180) * hkj ; }else if( ( Ub >=90 ) and ( Ub < 180 ) ){ Oy2 = (sin(((Ub90)*PI)/180) * hkj)* 1; }else if( ( Ub >=180 ) and ( Ub < 270 ) ){ Oy2 = (cos(((Ub180)*PI)/180) * hkj )* 1; }else if( ( Ub >=270 ) and ( Ub < 360 ) ){ Oy2 = sin(((Ub270)*PI)/180) * hkj ; } return Oy2 ;
}

do the rotation in 3D:
if( Ub2 > 359 ){ Ub2 = 0; } // Ub2 is the number of degrees if( Ub2 < 0 ){ Ub2 = 359; }
// if key A is pressed
if (KB_A){
Ub2 += 5;
// put new x and y values in object array
object[1][2][0] = rotateX(object[1][1][0],object[1][1][1],object[1][2][0],object[1][2][1],100) + object[1][1][0] ;
object[1][2][1] = rotateY(object[1][1][0],object[1][1][1],object[1][2][0],object[1][2][1],100) + object[1][1][1] ;}
if (KB_Z){Ub2 = 5;
object[1][2][0] = rotateX(object[1][1][0],object[1][1][1],object[1][2][0],object[1][2][1],20) + object[1][1][0] ;
object[1][2][1] = rotateY(object[1][1][0],object[1][1][1],object[1][2][0],object[1][2][1],20) + object[1][1][1] ;}
The rotation is made around the objects origin.
Edited 4 Years Ago by dot_binary: misstiped word in title