Tutorial *79*
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);

}

Standard end, compile and run, try to use spr_oriented sprite in quakec to see the difference.


 
Sign up
Login:
Passwd:
[Remember Me]