📄 triquadd.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 + -