⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shaded.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
		else set_fill_index( indxlist[0]);		}	else if (renderstyle == 2) {set_vertex_indices( indxlist, npvert[p]);}	else {set_vertex_normals(dxlist,dylist,dzlist,npvert[p]);}	if (renderstyle == 0) polyline_abs_3( xlist,ylist,zlist,npvert[p]);	else polygon_abs_3( xlist, ylist, zlist, npvert[p]);}static float maxvw, vwpp, maxvdim;static float vlx, vby, vfz, vdx, vdy, vdz;static float minleft, maxright, minbot, maxtop, minback, maxfront;initvw()	{	int i;	float ftmp;	ftmp = bbox[0][1];	for (i = 1; i < 3; i++)		if (bbox[i][1] > ftmp)			ftmp = bbox[i][1];	maxvw = 16.0 * ftmp;	vwpp = 2.0 * maxvw / 480.0;	maxvdim = maxvw - ceil(vwpp);	vlx = (bbox[0][0] + maxvw) / vwpp;	vby = 100.0 + (bbox[1][0] + maxvw) / vwpp;	vfz = 580.0 - (bbox[2][1] + maxvw) / vwpp;	vdx = (bbox[0][1] - bbox[0][0]) / vwpp;	vdy = (bbox[1][1] - bbox[1][0]) / vwpp;	vdz = (bbox[2][1] - bbox[2][0]) / vwpp;	minleft = bbox[0][0] - 5.0;	maxright = bbox[0][1] + 5.0;	minbot = bbox[1][0] - 5.0;	maxtop = bbox[1][1] + 5.0;	minback = bbox[2][0] - 5.0;	maxfront = bbox[2][1] + 5.0;	}getxyz(px, py, pz)float *px, *py, *pz;	{	int button;	float mx, my, fx, fy;	int checkreg();	setvwpv();	create_temporary_segment();	set_primitive_attributes( &PRIMATTS);	set_charprecision(STRING);	draw_labels();	draw_cursors(*px, *py, *pz);	set_echo(LOCATOR, 1, 1);	for (;;) {		do		    await_any_button_get_locator_2(20000000,1,&button,&mx,&my);		while(button == 0);		if (button == 3) break;		map_ndc_to_world_2( mx, my, &fx, &fy);		switch (checkreg(fx, fy, button, px, py, pz)) {		case 0:	break;		case 1:	draw_front(*px, *py);			break;		case 2:	draw_top(*pz);			break;		case 3:	menu_select();			break;			}		}	set_echo(LOCATOR, 1, 0);	close_temporary_segment();	}setvwpv()	{	set_view_reference_point(0.0, 0.0, 0.0);	set_view_plane_normal(0.0, 0.0, -1.0);	set_view_plane_distance(0.0);	set_projection(PARALLEL, 0.0, 0.0, 1.0);	set_view_up_3(0.0, 1.0, 0.0);	set_window(0.0, 1023.0, 0.0, 767.0);	set_view_depth( 0.0, 1.0);	set_window_clipping(FALSE);	set_viewport_3(0.0, 1., 0.0, .75, 0.0, 1.);	}draw_labels()	{	int i;	move_abs_3(50.0, 680.0, 0.5);	line_rel_2(0.0, -75.0);	line_rel_2(75.0, 0.0);	move_abs_2(45.0, 670.0);	line_rel_2(5.0, 10.0);	line_rel_2(5.0, -10.0);	move_abs_2(115.0, 610.0);	line_rel_2(10.0, -5.0);	line_rel_2(-10.0, -5.0);	move_abs_2(130.0, 612.0);	text("x");	move_abs_2(48.0, 695.0);	text("y");	move_abs_2(220.0, 605.0);	text("Front View");	move_abs_2(0.0, 100.0);	line_rel_2(480.0, 0.0);	line_rel_2(0.0, 480.0);	line_rel_2(-480.0, 0.0);	line_rel_2(0.0, -480.0);	for (i = 0; i <= 20; i++) {		move_abs_2((float) 24 * i, 100.0);		line_rel_2(0.0, i % 2 ? -5.0 : -10.0);		}	for (i = 0; i <= 20; i++) {		move_abs_2(480.0, ((float) 24 * i) + 100.0);		line_rel_2(i % 2 ? 5.0 : 10.0, 0.0);		}	move_abs_2(593.0, 605.0);	line_rel_2(0.0, 75.0);	line_rel_2(75.0, 0.0);	move_abs_2(588.0, 615.0);	line_rel_2(5.0, -10.0);	line_rel_2(5.0, 10.0);	move_abs_2(658.0, 685.0);	line_rel_2(10.0, -5.0);	line_rel_2(-10.0, -5.0);	move_abs_2(673.0, 687.0);	text("x");	move_abs_2(591.0, 600.0);	text("z");	move_abs_2(763.0, 605.0);	text("Top View");	move_abs_2(543.0, 100.0);	line_rel_2(480.0, 0.0);	line_rel_2(0.0, 480.0);	line_rel_2(-480.0, 0.0);	line_rel_2(0.0, -480.0);	for (i = 0; i <= 20; i++) {		move_abs_2(543.0, ((float) 24 * i) + 100.0);		line_rel_2(i % 2 ? -5.0 : -10.0, 0.0);		}	}draw_cursors(x, y, z)float x, y, z;	{	draw_front(x, y);	draw_top(z);	}draw_front(x, y)float x, y;	{	static float vx = 240.0, vy = 340.0;	set_line_index(0);	move_abs_3(vx, 101.0, 0.5);	line_rel_2(0.0, 478.0);	move_abs_2(1.0, vy);	line_rel_2(478.0, 0.0);	set_line_index(1);	move_abs_2(vlx, vby);	line_rel_2(vdx, 0.0);	line_rel_2(0.0, vdy);	line_rel_2(-vdx, 0.0);	line_rel_2(0.0, -vdy);	vx = (x + maxvw) / vwpp;	vy = 100.0 + (y + maxvw) / vwpp;	move_abs_2(vx, 101.0);	line_rel_2(0.0, 478.0);	move_abs_2(1.0, vy);	line_rel_2(478.0, 0.0);	}draw_top(z)float z;	{	static float vz = 340.0;	set_line_index(0);	move_abs_3(544.0, vz, 0.5);	line_rel_2(478.0, 0.0);	set_line_index(1);	move_abs_2(vlx + 543.0, vfz);	line_rel_2(vdx, 0.0);	line_rel_2(0.0, vdz);	line_rel_2(-vdx, 0.0);	line_rel_2(0.0, -vdz);	vz = 580.0 - (z + maxvw) / vwpp;	move_abs_2(544.0, vz);	line_rel_2(478.0, 0.0);	}int checkreg(vx, vy, butnum, px, py, pz)float vx, vy, *px, *py, *pz;int butnum;	{	float f;	int insideobj();	if ((vx >= 0.0) && (vx <= 480.0) && (vy >= 100.0) && (vy <= 580.0)) {		if (butnum == 1) {			f = vx * vwpp - maxvw;			f = f <= maxvdim ? f : maxvdim;			f = f >= -maxvdim ? f : -maxvdim;			if (insideobj(f, *py, *pz))				return(0);			*px = f;			return(1);			}		else {			f = (vy - 100.0) * vwpp - maxvw;			f = f <= maxvdim ? f : maxvdim;			f = f >= -maxvdim ? f : -maxvdim;			if (insideobj(*px, f, *pz))				return(0);			*py = f;			return(1);			}		}	else if ((vx >= 543.0)&&(vx <= 1023.0)&&(vy >= 100.0)&&(vy <= 580.0)) {		if (butnum == 2) {			f = (580.0 - vy) * vwpp - maxvw;			f = f <= maxvdim ? f : maxvdim;			f = f >= -maxvdim ? f : -maxvdim;			if (insideobj(*px, *py, f))				return(0);			*pz = f;			return(2);			}		else			return(0);		}	else		return(3);	}int insideobj(x, y, z)float x, y, z;	{	if ((x < minleft) || (x > maxright))		return(0);	if ((y < minbot) || (y > maxtop))		return(0);	if ((z < minback) || (z > maxfront))		return(0);	return(1);	}build_menu(){    int i, j;    create_retained_segment( 2);	 set_primitive_attributes( &PRIMATTS);	 move_abs_3( 100.,90.,0.0);	 set_text_index( 1);	 set_font( 1); set_charsize( 4.,3.);	 move_abs_2( 10., 70.); set_pick_id( 1); text("Edges");	 move_abs_2( 210., 70.); set_pick_id( 2); text("Fast Shade");	 move_abs_2( 410., 70.); set_pick_id( 3); text("Gouraud");	 move_abs_2( 610., 70.); set_pick_id( 4); text("Phong diffuse");	 move_abs_2( 810., 70.); set_pick_id( 5); text("Phong specular");	 move_abs_2( 10., 40.); set_pick_id( 6); text("Grey");	 move_abs_2( 210., 40.); set_pick_id( 7); text("Red");	 move_abs_2( 410., 40.); set_pick_id( 8); text("Green");	 move_abs_2( 610., 40.); set_pick_id( 9); text("Blue");	 move_abs_2( 810., 40.); set_pick_id(10); text("Yellow");    close_retained_segment();    set_segment_detectability( 2, 1);    set_segment_visibility( 2, FALSE);}menu_select(){    int done, segnam, pickid, butnum;    int hue;    set_segment_visibility( 2, TRUE);    done = FALSE;    while ( !done) {	await_pick( 100000000, 1, &segnam, &pickid);	/* pick menu item */	if (segnam == 0) { done = TRUE; }	else if (segnam == 2) {	    if (pickid < 6) renderstyle = pickid -1;	    else if (pickid < 11) renderhue = pickid -6;	    }    }    if (renderhue == 0) define_color_indices( our_surface,0,255,red,grn,blu);    else define_color_indices( our_surface,0,255,dred,dgrn,dblu);		    /* ambient,diffuse,specular,flood,bump,hue,style */    hue = renderhue;    switch (renderstyle) {    case 1: set_shading_parameters( .01, .96, .0, 0., 7.,hue,0); break;    case 2: set_shading_parameters( .01, .96, .0, 0., 7.,hue,1); break;    case 3: set_shading_parameters( .01, .95, .0, 0., 7.,hue,2); break;    case 4: set_shading_parameters( .05, .50, .40, 0., 7.,hue,2); break;    default: break;    }    set_segment_visibility( 2, FALSE);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -