コード例 #1
0
ファイル: draw.c プロジェクト: paud/d2x-xl
//draw a texture-mapped face.
//returns 1 if off screen, 0 if drew
bool G3DrawTexPoly (int nv, g3sPoint **pointlist, uvl *uvl_list, vmsVector *norm, grsBitmap *bm)
{
	int i;
	g3sPoint **bufptr, *p;
	g3s_codes cc;

cc.or = 0; 
cc.and = 0xff;
bufptr = Vbuf0;
for (i=0;i<nv;i++) {
	p = bufptr[i] = pointlist[i];
	cc.and &= p->p3_codes;
	cc.or  |= p->p3_codes;
	p->p3_u = uvl_list[i].u;
	p->p3_v = uvl_list[i].v;
	p->p3_l = uvl_list[i].l;
	p->p3Flags |= PF_UVS + PF_LS;
	}
if (cc.and)
	return 1;	//all points off screen
if (cc.or)
	return must_clip_tmap_face (nv, cc, bm);
//now make list of 2d coords (& check for overflow)
for (i=0;i<nv;i++) {
	p = bufptr[i];
	if (! (p->p3Flags&PF_PROJECTED))
		G3ProjectPoint (p);
	if (p->p3Flags&PF_OVERFLOW) {
		Int3 ();		//should not overflow after clip
		return 255;
		}
	}
(*tmap_drawer_ptr) (bm, nv, bufptr);
return 0;	//say it drew
}
コード例 #2
0
ファイル: draw.c プロジェクト: jihnsius/d2r
//draw a texture-mapped face.
//returns 1 if off screen, 0 if drew
bool g3_draw_tmap(int nv,g3s_point **pointlist,g3s_uvl *uvl_list,g3s_lrgb *light_rgb,grs_bitmap *bm)
{
	int i;
	g3s_point **bufptr;
	g3s_codes cc;

	cc.uor = 0; cc.uand = 0xff;

	bufptr = Vbuf0;

	for (i=0;i<nv;i++) {
		g3s_point *p;

		p = bufptr[i] = pointlist[i];

		cc.uand &= p->p3_codes;
		cc.uor  |= p->p3_codes;

		p->p3_u = uvl_list[i].u;
		p->p3_v = uvl_list[i].v;
		p->p3_l = (light_rgb[i].r+light_rgb[i].g+light_rgb[i].b)/3;

		p->p3_flags |= PF_UVS + PF_LS;

	}

	if (cc.uand)
		return 1;	//all points off screen

	if (cc.uor)
		return must_clip_tmap_face(nv,cc,bm);

	//now make list of 2d coords (& check for overflow)

	for (i=0;i<nv;i++) {
		g3s_point *p = bufptr[i];

		if (!(p->p3_flags&PF_PROJECTED))
			g3_project_point(p);

		if (p->p3_flags&PF_OVERFLOW) {
			Int3();		//should not overflow after clip
			return 255;
		}
	}

	(*tmap_drawer_ptr)(bm,nv,bufptr);

	return 0;	//say it drew
}