示例#1
0
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);
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
	}
}
示例#5
0
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;
	}
}