Пример #1
0
/*
============
idTraceModel::SetupPolygon
============
*/
void idTraceModel::SetupPolygon( const idWinding &w ) {
	int i;
	idVec3 *verts;

	verts = (idVec3 *) _alloca16( w.GetNumPoints() * sizeof( idVec3 ) );
	for ( i = 0; i < w.GetNumPoints(); i++ ) {
		verts[i] = w[i].ToVec3();
	}
	SetupPolygon( verts, w.GetNumPoints() );
}
Пример #2
0
int Ray_PolygonFinish(Object *obj)
{
	PolygonData *ply;

	assert(obj != NULL);
	assert(obj->data.polygon != NULL);
	ply = obj->data.polygon;
	if(ply->npts < 3)
		return 0;
	SetupPolygon(ply);
	return 1;
}
Пример #3
0
Object *Ray_MakePolygon(float *pts, int npts)
{
	Object *obj = NewObject();

	if (obj != NULL)
	{
		PolygonData *polygon = (PolygonData *)Malloc(sizeof(PolygonData));
		if (polygon != NULL)
		{
			if (npts >= 3)
			{
				polygon->npts = npts;
				if((polygon->pts = (float *)Calloc(npts * 3, sizeof(float))) !=
					NULL)
				{
					if (pts != NULL)
					{
						// A point list was given. Copy the points into the
						// polygon point list and initialize it.
						//
						memcpy(polygon->pts, pts, npts * 3 * sizeof(float));
						SetupPolygon(polygon);
					}
				}
				else
				{
					// Alloc failed.
					Ray_DeleteObject(obj);
					return NULL;
				}
			}
			else
			{
				// Start with an empty polygon.
				// Points will be added later.
				//
				polygon->pts = NULL;
				polygon->npts = 0;
			}
			obj->data.polygon = polygon;
			obj->procs = &polygon_procs;

			// Don't shadow test against self.
			//
			obj->flags |= OBJ_FLAG_NO_SELF_INTERSECT;
		}
		else // Alloc failed
			obj = Ray_DeleteObject(obj);
	}

	return obj;
}
Пример #4
0
void MatrixTransformPolygon(PolygonData *p, Xform *T)
{
	Vec3 V;
	int i;
	float *old_pts, *new_pts;

	old_pts = new_pts = p->pts;
	for(i = 0; i < p->npts; i++)
	{
		V.x = *old_pts++;
		V.y = *old_pts++;
		V.z = *old_pts++;
		PointToWorld(&V, T);
		*new_pts++ = (float)V.x;
		*new_pts++ = (float)V.y;
		*new_pts++ = (float)V.z;
	}
	SetupPolygon(p);
}
Пример #5
0
void TransformPolygon(Object *obj, Vec3 *params, int type)
{
  PolygonData *p = obj->data.polygon;
	Vec3 V;
	int i;
	float *old_pts, *new_pts;

	old_pts = new_pts = p->pts;
	for(i = 0; i < p->npts; i++)
	{
		V.x = *old_pts++;
		V.y = *old_pts++;
		V.z = *old_pts++;
		XformVector(&V, params, type);
		*new_pts++ = (float)V.x;
		*new_pts++ = (float)V.y;
		*new_pts++ = (float)V.z;
	}
	SetupPolygon(p);
}