void map_mesh_rotate(map_type *map,int mesh_idx,d3pnt *center_pnt,d3ang *rot_ang) { int n,nvertex,npoly; float fx,fy,fz; d3vct f_mpt; d3pnt *pt; matrix_type mat; map_mesh_type *mesh; map_mesh_poly_type *poly; mesh=&map->mesh.meshes[mesh_idx]; // get mesh rotation center f_mpt.x=(float)(center_pnt->x+mesh->rot_off.x); f_mpt.y=(float)(center_pnt->y+mesh->rot_off.y); f_mpt.z=(float)(center_pnt->z+mesh->rot_off.z); // matrixes matrix_rotate_xyz(&mat,rot_ang->x,rot_ang->y,rot_ang->z); // rotate vertexes nvertex=mesh->nvertex; pt=mesh->vertexes; for (n=0; n!=nvertex; n++) { fx=((float)pt->x)-f_mpt.x; fy=((float)pt->y)-f_mpt.y; fz=((float)pt->z)-f_mpt.z; matrix_vertex_multiply(&mat,&fx,&fy,&fz); pt->x=(int)(fx+f_mpt.x); pt->y=(int)(fy+f_mpt.y); pt->z=(int)(fz+f_mpt.z); pt++; } // fix boxes npoly=mesh->npoly; poly=mesh->polys; for (n=0; n!=npoly; n++) { map_prepare_mesh_poly(mesh,poly); poly++; } // fix mesh box map_prepare_mesh_box(mesh); }
void rotate_point_center(int *x,int *y,int *z,float ang_x,float ang_y,float ang_z) { float fx,fy,fz; matrix_type mat; matrix_rotate_xyz(&mat,ang_x,ang_y,ang_z); fx=(float)*x; fy=(float)*y; fz=(float)*z; matrix_vertex_multiply(&mat,&fx,&fy,&fz); *x=(int)fx; *y=(int)fy; *z=(int)fz; }
void rotate_point(int *x,int *y,int *z,int cx,int cy,int cz,float ang_x,float ang_y,float ang_z) { float fx,fy,fz; matrix_type mat; matrix_rotate_xyz(&mat,ang_x,ang_y,ang_z); fx=(float)((*x)-cx); fy=(float)((*y)-cy); fz=(float)((*z)-cz); matrix_vertex_multiply(&mat,&fx,&fy,&fz); *x=(int)fx+cx; *y=(int)fy+cy; *z=(int)fz+cz; }
void rotate_polygon(int ptsz,int *x,int *y,int *z,int cx,int cy,int cz,float ang_x,float ang_y,float ang_z) { int n; int *px,*py,*pz; float fx,fy,fz; matrix_type mat; matrix_rotate_xyz(&mat,ang_x,ang_y,ang_z); px=x; py=y; pz=z; for (n=0;n<ptsz;n++) { fx=(float)((*px)-cx); fy=(float)((*py)-cy); fz=(float)((*pz)-cz); matrix_vertex_multiply(&mat,&fx,&fy,&fz); *px++=(int)fx+cx; *py++=(int)fy+cy; *pz++=(int)fz+cz; } }
void rotate_polygon_center(int ptsz,int *x,int *y,int *z,float ang_x,float ang_y,float ang_z) { int n; int *px,*py,*pz; float fx,fy,fz; matrix_type mat; matrix_rotate_xyz(&mat,ang_x,ang_y,ang_z); px=x; py=y; pz=z; for (n=0;n<ptsz;n++) { fx=(float)*px; fy=(float)*py; fz=(float)*pz; matrix_vertex_multiply(&mat,&fx,&fy,&fz); *px++=(int)fx; *py++=(int)fy; *pz++=(int)fz; } }