1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
/**
** sipp - SImple Polygon Processor
**
** A general 3d graphic package
**
** Copyright Equivalent Software HB 1992
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 1, or any later version.
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
** You can receive a copy of the GNU General Public License from the
** Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
**/
/**
** transforms.c - Functions that handles object transformations.
**/
#include <stdio.h>
#include <sipp.h>
/*
* Set the transformation matrix of OBJ to MATRIX.
*/
void
object_set_transf(obj, matrix)
Object *obj;
Transf_mat *matrix;
{
MatCopy(&obj->transf, matrix);
}
/*
* Retrieve the transformation matrix of OBJ
*/
Transf_mat *
object_get_transf(obj, matrix)
Object *obj;
Transf_mat *matrix;
{
Transf_mat *tmp;
if (matrix != NULL) {
MatCopy(matrix, &obj->transf);
return matrix;
} else {
tmp = transf_mat_create(NULL);
MatCopy(tmp, &obj->transf);
return tmp;
}
}
/*
* Set the transformation matrix of OBJ to the identity matrix.
*/
void
object_clear_transf(obj)
Object *obj;
{
MatCopy(&obj->transf, &ident_matrix);
}
/*
* Post multiply MATRIX into the transformation matrix of OBJ.
*/
void
object_transform(obj, matrix)
Object *obj;
Transf_mat *matrix;
{
mat_mul(&obj->transf, &obj->transf, matrix);
}
/*
* Rotate the object OBJ ANG radians about the x-axis.
*/
void
object_rot_x(obj, ang)
Object *obj;
double ang;
{
mat_rotate_x(&obj->transf, ang);
}
/*
* Rotate the object OBJ ANG radians about the y-axis.
*/
void
object_rot_y(obj, ang)
Object *obj;
double ang;
{
mat_rotate_y(&obj->transf, ang);
}
/*
* Rotate the object OBJ ANG radians about the z-axis.
*/
void
object_rot_z(obj, ang)
Object *obj;
double ang;
{
mat_rotate_z(&obj->transf, ang);
}
/*
* Rotate the object OBJ ANG radians about the line defined
* by POINT and VEC.
*/
void
object_rot(obj, point, vec, ang)
Object *obj;
Vector *point;
Vector *vec;
double ang;
{
mat_rotate(&obj->transf, point, vec, ang);
}
/*
* Scale the object OBJ with respect to the origin.
*/
void
object_scale(obj, xscale, yscale, zscale)
Object *obj;
double xscale, yscale, zscale;
{
mat_scale(&obj->transf, xscale, yscale, zscale);
}
/*
* Translate the object OBJ.
*/
void
object_move(obj, dx, dy, dz)
Object *obj;
double dx, dy, dz;
{
mat_translate(&obj->transf, dx, dy, dz);
}
|