Пример #1
0
static int clip_poly(float src[MAXV][MAXN],
	float dst[MAXV][MAXN], int len, int n,
	float val, int isy, int ismax)
{
	float cv1[MAXN];
	float cv2[MAXN];
	int v1, v2, cp;
	int r;

	v1 = len - 1;
	cp = 0;

	for (v2 = 0; v2 < len; v2++)
	{
		copy_vert(cv1, src[v1], n);
		copy_vert(cv2, src[v2], n);

		if (isy)
			r = clipy(val, ismax, cv1, cv2, n);
		else
			r = clipx(val, ismax, cv1, cv2, n);

		switch (r)
		{
		case IN:
			copy_vert(dst[cp++], cv2, n);
			break;
		case OUT:
			break;
		case LEAVE:
			copy_vert(dst[cp++], cv2, n);
			break;
		case ENTER:
			copy_vert(dst[cp++], cv1, n);
			copy_vert(dst[cp++], cv2, n);
			break;
		}
		v1 = v2;
	}

	return cp;
}
Пример #2
0
static int clip_poly(float src[MAXV][MAXN],
	float dst[MAXV][MAXN], int len, int n,
	float val, int isy, int ismax)
{
	int v1, v2, cp;

	v1 = len - 1;
	cp = 0;

	if (isy)
		for (v2 = 0; v2 < len; v2++)
		{
			cp += clipy(val, ismax, src[v1], src[v2], n, dst[cp]);
			v1 = v2;
		}
	else
		for (v2 = 0; v2 < len; v2++)
		{
			cp += clipx(val, ismax, src[v1], src[v2], n, dst[cp]);
			v1 = v2;
		}

	return cp;
}