コード例 #1
0
ファイル: cg_marks.c プロジェクト: GenaSG/etlegacy
void CG_ImpactMark(qhandle_t markShader, vec3_t origin, vec4_t projection, float radius, float orientation, float r, float g, float b, float a, int lifeTime)
{
	int    i;
	vec3_t pushedOrigin, axis[3];
	vec4_t color;
	int    fadeTime;
	vec3_t points[4];

	// early out
	if (lifeTime == 0)
	{
		return;
	}

	// set projection (inverse of dir)
	//VectorSubtract( vec3_origin, dir, projection );
	//VectorNormalize( projection );
	//projection[ 3 ] = radius * 8;

	// make rotated polygon axis
	VectorCopy(projection, axis[0]);
	PerpendicularVector(axis[1], axis[0]);
	RotatePointAroundVector(axis[2], axis[0], axis[1], -orientation);
	CrossProduct(axis[0], axis[2], axis[1]);

	// push the origin out a bit
	VectorMA(origin, -1.0f, axis[0], pushedOrigin);

	// create the full polygon
	for (i = 0; i < 3; i++)
	{
		// new
		points[0][i] = pushedOrigin[i] - radius * axis[1][i] - radius * axis[2][i];
		points[1][i] = pushedOrigin[i] - radius * axis[1][i] + radius * axis[2][i];
		points[2][i] = pushedOrigin[i] + radius * axis[1][i] + radius * axis[2][i];
		points[3][i] = pushedOrigin[i] + radius * axis[1][i] - radius * axis[2][i];
	}

	// debug code
	#if 0
	VectorSet(points[0], origin[0] - radius, origin[1] - radius, origin[2]);
	VectorSet(points[1], origin[0] - radius, origin[1] + radius, origin[2]);
	VectorSet(points[2], origin[0] + radius, origin[1] + radius, origin[2]);
	VectorSet(points[3], origin[0] + radius, origin[1] - radius, origin[2]);
	CG_Printf("Dir: %f %f %f\n", dir[0], dir[1], dir[2]);
	#endif

	// set color
	color[0] = r;
	color[1] = g;
	color[2] = b;
	color[3] = a;

	// set decal times (in seconds)
	fadeTime = lifeTime >> 4;

	// add the decal
	trap_R_ProjectDecal(markShader, 4, points, projection, color, lifeTime, fadeTime);
}
コード例 #2
0
void CG_ImpactMark( qhandle_t markShader, vec3_t origin, vec4_t projection, float radius, float orientation, float r, float g, float b, float a, int lifeTime )
#ifdef YDNAR_DECAL_MARKS
{
	int			i;
	vec3_t		pushedOrigin, axis[ 3 ];
	vec4_t		color;
	int			fadeTime;
	vec3_t		points[ 4 ];
	
	
	/* early out */
	if( lifeTime == 0 )
		return;
	
	/* set projection (inverse of dir) */
 	//%	VectorSubtract( vec3_origin, dir, projection );
	//%	VectorNormalize( projection );
	//%	projection[ 3 ] = radius * 8;
	
	/* make rotated polygon axis */
	VectorCopy( projection, axis[ 0 ] );
	PerpendicularVector( axis[ 1 ], axis[ 0 ] );
	RotatePointAroundVector( axis[ 2 ], axis[ 0 ], axis[ 1 ], -orientation );
	CrossProduct( axis[ 0 ], axis[ 2 ], axis[ 1 ] );
	
	/* push the origin out a bit */
	VectorMA( origin, -1.0f, axis[ 0 ], pushedOrigin );
	
	/* create the full polygon */
	for( i = 0; i < 3; i++ )
	{
		/* old */
		//%	points[ 0 ][ i ] = pushedOrigin[ i ] - radius * axis[ 1 ][ i ] - radius * axis[ 2 ][ i ];
		//%	points[ 1 ][ i ] = pushedOrigin[ i ] + radius * axis[ 1 ][ i ] - radius * axis[ 2 ][ i ];
		//%	points[ 2 ][ i ] = pushedOrigin[ i ] + radius * axis[ 1 ][ i ] + radius * axis[ 2 ][ i ];
		//%	points[ 3 ][ i ] = pushedOrigin[ i ] - radius * axis[ 1 ][ i ] + radius * axis[ 2 ][ i ];
		
		/* new */
		points[ 0 ][ i ] = pushedOrigin[ i ] - radius * axis[ 1 ][ i ] - radius * axis[ 2 ][ i ];
		points[ 1 ][ i ] = pushedOrigin[ i ] - radius * axis[ 1 ][ i ] + radius * axis[ 2 ][ i ];
		points[ 2 ][ i ] = pushedOrigin[ i ] + radius * axis[ 1 ][ i ] + radius * axis[ 2 ][ i ];
		points[ 3 ][ i ] = pushedOrigin[ i ] + radius * axis[ 1 ][ i ] - radius * axis[ 2 ][ i ];
	}
	
	/* debug code */
	#if 0
		VectorSet( points[ 0 ], origin[ 0 ] - radius, origin[ 1 ] - radius, origin[ 2 ] );
		VectorSet( points[ 1 ], origin[ 0 ] - radius, origin[ 1 ] + radius, origin[ 2 ] );
		VectorSet( points[ 2 ], origin[ 0 ] + radius, origin[ 1 ] + radius, origin[ 2 ] );
		VectorSet( points[ 3 ], origin[ 0 ] + radius, origin[ 1 ] - radius, origin[ 2 ] );
		CG_Printf( "Dir: %f %f %f\n", dir[ 0 ], dir[ 1 ], dir[ 2 ] );
	#endif
	
	/* set color */
	color[ 0 ] = r;
	color[ 1 ] = g;
	color[ 2 ] = b;
	color[ 3 ] = a;
	
	/* set decal times (in seconds) */
	fadeTime = lifeTime >> 4;
	
	/* add the decal */
	trap_R_ProjectDecal( markShader, 4, points, projection, color, lifeTime, fadeTime );
}