|
Editors note: i scrapped this together from an #openquake chat log, it may be usefull to you, it was to me at least This is to fix oriented sprites, so you can use sprites as bullet holes and other types of things in which case oriented sprites would be handy. In gl_rmain.c simply replace the old R_DrawSpriteModel function with the following one:
//Atomizer - New math function
#define VectorScalarMult(a,b,c) {c[0]=a[0]*b;c[1]=a[1]*b;c[2]=a[2]*b;}
//Atom
void R_DrawSpriteModel (entity_t *e)
{
vec3_t point;
mspriteframe_t *frame;
float *up, *right;
vec3_t v_forward, v_right, v_up;
msprite_t *psprite;
//Atomizer - GL_POLYOFFSET
//entity_t fixed;
vec3_t fixed_origin;
//vec3_t multiple = {2,2,2};
vec3_t temp;
//memcpy(dest, src, sizeof());
//Atom
// don't even bother culling, because it's just a single
// polygon without a surface cache
frame = R_GetSpriteFrame (e);
psprite = currententity->model->cache.data;
//Atomizer - GL_POLYOFFSET
//memcpy (fixed_origin, e->origin, sizeof(vec3_t));
VectorCopy(e->origin,fixed_origin);
//Atom
if (psprite->type == SPR_ORIENTED)
{ // bullet marks on walls
AngleVectors (currententity->angles, v_forward, v_right, v_up);
//Atomizer - GL_POLYOFFSET
VectorScalarMult(v_forward,-2,temp);
VectorAdd(temp,fixed_origin,fixed_origin);
//Atom
up = v_up;
right = v_right;
}
else
{ // normal sprite
up = vup;
right = vright;
}
glColor3f (1,1,1);
GL_DisableMultitexture();
GL_Bind(frame->gl_texturenum);
glEnable (GL_ALPHA_TEST);
glBegin (GL_QUADS);
glTexCoord2f (0, 1);
//Atomizer - GL_POLYOFFSET
//VectorMA (e->origin, frame->down, up, point);
VectorMA (fixed_origin, frame->down, up, point);
//Atom
VectorMA (point, frame->left, right, point);
glVertex3fv (point);
glTexCoord2f (0, 0);
//Atomizer - GL_POLYOFFSET
//VectorMA (e->origin, frame->up, up, point);
VectorMA (fixed_origin, frame->up, up, point);
//Atom
VectorMA (point, frame->left, right, point);
glVertex3fv (point);
glTexCoord2f (1, 0);
//Atomizer - GL_POLYOFFSET
//VectorMA (e->origin, frame->up, up, point);
VectorMA (fixed_origin, frame->up, up, point);
//Atom
VectorMA (point, frame->right, right, point);
glVertex3fv (point);
glTexCoord2f (1, 1);
//Atomizer - GL_POLYOFFSET
//VectorMA (e->origin, frame->down, up, point);
VectorMA (fixed_origin, frame->down, up, point);
//Atom
VectorMA (point, frame->right, right, point);
glVertex3fv (point);
glEnd ();
glDisable (GL_ALPHA_TEST);
}
|