]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - transform.c
-safe now does something approximately close to correct. Not a full fix
[xonotic/darkplaces.git] / transform.c
index b8db4c359e3f52b9e9d8ca5cb52a2167e72193cd..363d04c921bceb25d5daa08f70a09d6ffb647b3a 100644 (file)
@@ -68,8 +68,20 @@ void softwaretransform_docopy (vec3_t in, vec3_t out)
        out[2] = in[2];
 }
 
+void softwareuntransform (vec3_t in, vec3_t out)
+{
+       vec3_t v;
+       float s = 1.0f / softwaretransform_scale;
+       v[0] = in[0] - softwaretransform_offset[0];
+       v[1] = in[1] - softwaretransform_offset[1];
+       v[2] = in[2] - softwaretransform_offset[2];
+       out[0] = (v[0] * softwaretransform_x[0] + v[1] * softwaretransform_x[1] + v[2] * softwaretransform_x[2]) * s;
+       out[1] = (v[0] * softwaretransform_y[0] + v[1] * softwaretransform_y[1] + v[2] * softwaretransform_y[2]) * s;
+       out[2] = (v[0] * softwaretransform_z[0] + v[1] * softwaretransform_z[1] + v[2] * softwaretransform_z[2]) * s;
+}
+
 // to save time on transforms, choose the appropriate function
-void softwaretransform_classify()
+void softwaretransform_classify(void)
 {
        if (softwaretransform_offset[0] != 0 || softwaretransform_offset[1] != 0 || softwaretransform_offset[2] != 0)
        {
@@ -115,7 +127,7 @@ void softwaretransform_classify()
        }
 }
 
-void softwaretransformidentity ()
+void softwaretransformidentity(void)
 {
        softwaretransform_offset[0] = softwaretransform_offset[1] = softwaretransform_offset[2] = softwaretransform_x[1] = softwaretransform_x[2] = softwaretransform_y[0] = softwaretransform_y[2] = softwaretransform_z[0] = softwaretransform_z[1] = 0;
        softwaretransform_x[0] = softwaretransform_y[1] = softwaretransform_z[2] = 1;
@@ -136,11 +148,17 @@ void softwaretransformset (vec3_t origin, vec3_t angles, vec_t scale)
        softwaretransform_classify();
 }
 
-void softwaretransformforentity (entity_t *e)
+void softwaretransformforentity (entity_render_t *r)
 {
        vec3_t angles;
-       angles[0] = -e->angles[0];
-       angles[1] = e->angles[1];
-       angles[2] = e->angles[2];
-       softwaretransformset(e->origin, angles, e->scale);
+       angles[0] = -r->angles[0];
+       angles[1] = r->angles[1];
+       angles[2] = r->angles[2];
+       softwaretransformset(r->origin, angles, r->scale);
+}
+
+// brush entities are not backwards like models and sprites are
+void softwaretransformforbrushentity (entity_render_t *r)
+{
+       softwaretransformset(r->origin, r->angles, r->scale);
 }