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

📄 triquadd.c

📁 Intro/: Directory containing introductory examples. HelloWorld.c A simple program that draws a bo
💻 C
字号:
#include <phigs.h>			/* get HP-PHIGS definitions for C */#include <stdio.h>			/* get standard I/O definitions */#include <math.h>			/* link with library "-lm" */#define	SetGcolr(Var,Rd,Gr,Bl)	Var.colr_type = PCOLR_RGB;		\				Var.colr_value.colr_rep.rgb.red   = Rd;	\				Var.colr_value.colr_rep.rgb.green = Gr;	\				Var.colr_value.colr_rep.rgb.blue  = BlPgcolr		GWhite, GRed;			/* colours in Pgcolr format */static Prgb	Red    = {1.0, 0.0, 0.0};	/* RGB for red */static Prgb	Yellow = {1.0, 1.0, 0.0};	/* RGB for yellow */main()					/* file "TriQuadD.c" */{    Pint	WorkstnID = 1;		/* workstation identifier */    Pint	ConnID;			/* connection identifier */    Pint	WorkstnType = POIDDX;	/* out/in, direct, dbl bfr, Xwindow */    Pint	Scene=1, Strip=2, Mesh=3;	/* structure IDs */    /*--- initialize variables ---------------------------------------------*/    SetGcolr(GWhite,  1.0, 1.0, 1.0);    SetGcolr(GRed,    1.0, 0.0, 0.0);    /*--- start up PHIGS ---------------------------------------------------*/    popen_phigs((char *) stderr, 0);	/* errors go to "stderr" */    pescape_u4("/dev/screen/phigs_window", &ConnID);    popen_ws(WorkstnID, (void *) ConnID, WorkstnType);    pescape_u250(WorkstnID, 0);		/* direct colour environment */    CreateQuadrilateralMesh(Mesh);    CreateTriangleStrip(Strip);    /*--- define the structure for the whole scene -------------------------*/    popen_struct(Scene);    pset_int_style(PSTYLE_SOLID);    pset_int_colr(&GRed);    pset_edge_flag(PEDGE_ON);    pset_edge_colr(&GWhite);    pset_int_shad_method(PINT_SHAD_METHOD_COLR);    pexec_struct(Mesh);    pexec_struct(Strip);    pclose_struct();    ppost_struct(WorkstnID, Scene, 1.0);    pclose_ws(WorkstnID);    pclose_phigs();}/****************************************************************************/CreateQuadrilateralMesh(Mesh)Pint	Mesh;{    Pvertex3_array	QuadMesh;	/* \				   */    Ppoint3		QuadMeshPts[30];/*  > main data structure for mesh */    Prgb		VertexColrs[30];/* /				   */    Pfacet_array	Facets;		/* facet data holder */    Prgb		FacetColrs[18];	/* facets' RGB array */    Pvec3		Vector;		/* for various translations */    Pmatrix3		xform;		/* transformation matrix */    Pint		Error;		/* error-return variable */    int			I;		/* loop control variable */        /*--- define the vertices for the quadrilateral mesh -------------------*/    for (I = 0; I < 30; I++) {	QuadMeshPts[I].x = (I % 10) * 0.04;	QuadMeshPts[I].y = 0.2 - (I / 10) * 0.1;	QuadMeshPts[I].z = 0.5;    }    /*--- define the facet colours for the quadrilateral mesh --------------*/    for (I = 0; I < 18; I++) {	if ((I % 9) % 2)	    FacetColrs[I] = Yellow;	else	    FacetColrs[I] =   Red;    }    /*--- define the vertex colours for the quadrilateral mesh -------------*/    for (I = 0; I < 30; I++) {	if ((I / 10) % 2)	    VertexColrs[I] =   Yellow;	else	    VertexColrs[I] =   Red;    }    /*--- define the structure that does the quadrilateral mesh ------------*/    popen_struct(Mesh);    QuadMesh.dims.size_x = 10;    QuadMesh.dims.size_y = 3;    QuadMesh.num_data_per_vertex = 0;    QuadMesh.vertex_points = QuadMeshPts;    QuadMesh.vertex_colrvs.colr_reps.rgb = NULL;    QuadMesh.vertex_norms = NULL;    QuadMesh.vertex_data = NULL;    Facets.dims.size_x = 2;    Facets.dims.size_y = 9;    Facets.num_data_per_facet = 0;    Facets.facet_colrvs.colr_reps.rgb = FacetColrs;    Facets.facet_norms = NULL;    Facets.facet_data = NULL;    /*--- first: use interior colour ---------------------------------------*/    Vector.delta_x = 0.08, Vector.delta_y = 0.76, Vector.delta_z = 0.0;    ptranslate3(&Vector, &Error, xform);    pset_local_tran3(xform, PTYPE_REPLACE);    pquad_mesh3_data(PCOLR_RGB, NULL, NULL, &QuadMesh);    /*--- second: use facet colour -----------------------------------------*/    Vector.delta_x = 0.52, Vector.delta_y = 0.76, Vector.delta_z = 0.0;    ptranslate3(&Vector, &Error, xform);    pset_local_tran3(xform, PTYPE_REPLACE);    pquad_mesh3_data(PCOLR_RGB, &Facets, NULL, &QuadMesh);    /*--- third: use vertex colour -----------------------------------------*/    QuadMesh.vertex_colrvs.colr_reps.rgb = VertexColrs;    Vector.delta_x = 0.52, Vector.delta_y = 0.53, Vector.delta_z = 0.0;    ptranslate3(&Vector, &Error, xform);    pset_local_tran3(xform, PTYPE_REPLACE);    pquad_mesh3_data(PCOLR_RGB, NULL, NULL, &QuadMesh);    pclose_struct();}/****************************************************************************/CreateTriangleStrip(Strip)Pint	Strip;{    Pvertex3_list	TriStrip1;		/* \  for the data for the */    Ppoint3		TriStripPts1[20];	/*  > top one of each pair */    Prgb		VertexColrs1[20];	/* /  of triangle strips   */    Pvertex3_list	TriStrip2;		/* \  for the data for the */    Ppoint3		TriStripPts2[20];	/*  > bottom one of each   */    Prgb		VertexColrs2[20];	/* /  pair of tri. strips  */    Pfacet_list		Facets;		/* facet data holder */    Prgb		FacetColrs[18];	/* facets' RGB array */    Pvec3		Vector;		/* for various translations */    Pmatrix3		xform;		/* transformation matrix */    Pint		Error;		/* error-return variable */    int			I;		/* loop control variable */        /*--- define the points for the triangle strips ------------------------*/    for (I = 0; I < 20; I++) {	TriStripPts1[I].x = (I / 2) * 0.04;	TriStripPts1[I].y = (1 - I % 2) * 0.1;	TriStripPts1[I].z = 0.5;	TriStripPts2[I].x = TriStripPts1[I].x;	TriStripPts2[I].y = TriStripPts1[I].y + 0.1;	TriStripPts2[I].z = 0.5;    }    /*--- define the facet colours for the triangle strips -----------------*/    for (I = 0; I < 18; I++) {	if (I % 4 <= 1)	    FacetColrs[I] =   Red;	else	    FacetColrs[I] =   Yellow;    }    /*--- define the vertex colours for the triangle strips ----------------*/    for (I = 0; I < 20; I++) {	if (I % 2) {	    VertexColrs1[I] =   Red;	    VertexColrs2[I] =   Yellow;	}	else {	    VertexColrs1[I] =   Yellow;	    VertexColrs2[I] =   Red;	}    }    /*=== define the structure that does the triangle strips ===============*/    popen_struct(Strip);    TriStrip1.num_vertices = 20;    TriStrip2.num_vertices = 20;    TriStrip1.num_data_per_vertex = 0;    TriStrip1.num_data_per_vertex = 0;    TriStrip1.vertex_points = TriStripPts1;    TriStrip2.vertex_points = TriStripPts2;    TriStrip1.vertex_colrvs.colr_reps.rgb = NULL;    TriStrip2.vertex_colrvs.colr_reps.rgb = NULL;    TriStrip1.vertex_norms = NULL;    TriStrip2.vertex_norms = NULL;    TriStrip1.vertex_data = NULL;    TriStrip2.vertex_data = NULL;    Facets.num_facets = 18;    Facets.num_data_per_facet = 0;    Facets.facet_colrvs.colr_reps.rgb = FacetColrs;    Facets.facet_norms = NULL;    Facets.facet_data = NULL;    /*--- first: use interior colour ---------------------------------------*/    Vector.delta_x = 0.08, Vector.delta_y = 0.28, Vector.delta_z = 0.0;    ptranslate3(&Vector, &Error, xform);    pset_local_tran3(xform, PTYPE_REPLACE);    ptri_strip3_data(PCOLR_RGB, NULL, NULL, &TriStrip1);    ptri_strip3_data(PCOLR_RGB, NULL, NULL, &TriStrip2);    /*--- second: use facet colour -----------------------------------------*/    Vector.delta_x = 0.52, Vector.delta_y = 0.28, Vector.delta_z = 0.0;    ptranslate3(&Vector, &Error, xform);    pset_local_tran3(xform, PTYPE_REPLACE);    ptri_strip3_data(PCOLR_RGB, &Facets, NULL, &TriStrip1);    ptri_strip3_data(PCOLR_RGB, &Facets, NULL, &TriStrip2);    /*--- third: use vertex colour -----------------------------------------*/    TriStrip1.vertex_colrvs.colr_reps.rgb = VertexColrs1;    TriStrip2.vertex_colrvs.colr_reps.rgb = VertexColrs2;    Vector.delta_x = 0.52, Vector.delta_y = 0.05, Vector.delta_z = 0.0;    ptranslate3(&Vector, &Error, xform);    pset_local_tran3(xform, PTYPE_REPLACE);    ptri_strip3_data(PCOLR_RGB, NULL, NULL, &TriStrip1);    ptri_strip3_data(PCOLR_RGB, NULL, NULL, &TriStrip2);    pclose_struct();}

⌨️ 快捷键说明

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