//put a cube on the screen draw_cube() { int i,sn; short cube_vert_nums[9]; //find 8 free vertices for (i=0;i<9;i++) { int vn; vn = cube_vert_nums[i] = alloc_vert(); vm_vec_add(&Vertices[vn],&cube_position,&cube_coords[i]); } g3_rotate_list(9,cube_vert_nums); //fudge perspecive by using z value from cube center for all verts for (i=0;i<8;i++) Segment_points[cube_vert_nums[i]].z = Segment_points[cube_vert_nums[8]].z; //draw six sides for (sn=0;sn<6;sn++) { short side_vert_nums[4]; for (i=0;i<4;i++) side_vert_nums[3-i] = cube_vert_nums[Side_to_verts[sn][i]]; // gr_setcolor(sn+1); // g3_check_and_draw_poly(4,side_vert_nums,NULL); g3_check_and_draw_tmap(4,side_vert_nums,cube_uvls,Texture[39+sn]->bitmap,NULL); } //free 8 free vertices for (i=0;i<8;i++) free_vert(cube_vert_nums[i]); }
// ----------------------------------------------------------------------------- void draw_coordinate_axes(void) { int i; short Axes_verts[16]; vms_vector tvec,xvec,yvec,zvec; for (i=0; i<16; i++) Axes_verts[i] = alloc_vert(); create_coordinate_axes_from_segment(Cursegp,Axes_verts); vm_vec_sub(&xvec,&Vertices[Axes_verts[1]],&Vertices[Axes_verts[0]]); vm_vec_sub(&yvec,&Vertices[Axes_verts[2]],&Vertices[Axes_verts[0]]); vm_vec_sub(&zvec,&Vertices[Axes_verts[3]],&Vertices[Axes_verts[0]]); // Create the letter X tvec = xvec; vm_vec_add(&Vertices[Axes_verts[4]],&Vertices[Axes_verts[1]],vm_vec_scale(&tvec,F1_0/16)); tvec = yvec; vm_vec_add2(&Vertices[Axes_verts[4]],vm_vec_scale(&tvec,F1_0/8)); vm_vec_sub(&Vertices[Axes_verts[6]],&Vertices[Axes_verts[4]],vm_vec_scale(&tvec,F2_0)); tvec = xvec; vm_vec_scale(&tvec,F1_0/8); vm_vec_add(&Vertices[Axes_verts[7]],&Vertices[Axes_verts[4]],&tvec); vm_vec_add(&Vertices[Axes_verts[5]],&Vertices[Axes_verts[6]],&tvec); // Create the letter Y tvec = yvec; vm_vec_add(&Vertices[Axes_verts[11]],&Vertices[Axes_verts[2]],vm_vec_scale(&tvec,F1_0/16)); vm_vec_add(&Vertices[Axes_verts[8]],&Vertices[Axes_verts[11]],&tvec); vm_vec_add(&Vertices[Axes_verts[9]],&Vertices[Axes_verts[11]],vm_vec_scale(&tvec,F1_0*2)); vm_vec_add(&Vertices[Axes_verts[10]],&Vertices[Axes_verts[11]],&tvec); tvec = xvec; vm_vec_scale(&tvec,F1_0/16); vm_vec_sub2(&Vertices[Axes_verts[9]],&tvec); vm_vec_add2(&Vertices[Axes_verts[10]],&tvec); // Create the letter Z tvec = zvec; vm_vec_add(&Vertices[Axes_verts[12]],&Vertices[Axes_verts[3]],vm_vec_scale(&tvec,F1_0/16)); tvec = yvec; vm_vec_add2(&Vertices[Axes_verts[12]],vm_vec_scale(&tvec,F1_0/8)); vm_vec_sub(&Vertices[Axes_verts[14]],&Vertices[Axes_verts[12]],vm_vec_scale(&tvec,F2_0)); tvec = zvec; vm_vec_scale(&tvec,F1_0/8); vm_vec_add(&Vertices[Axes_verts[13]],&Vertices[Axes_verts[12]],&tvec); vm_vec_add(&Vertices[Axes_verts[15]],&Vertices[Axes_verts[14]],&tvec); rotate_list(16,Axes_verts); gr_setcolor(AXIS_COLOR); draw_line(Axes_verts[0],Axes_verts[1]); draw_line(Axes_verts[0],Axes_verts[2]); draw_line(Axes_verts[0],Axes_verts[3]); // draw the letter X draw_line(Axes_verts[4],Axes_verts[5]); draw_line(Axes_verts[6],Axes_verts[7]); // draw the letter Y draw_line(Axes_verts[8],Axes_verts[9]); draw_line(Axes_verts[8],Axes_verts[10]); draw_line(Axes_verts[8],Axes_verts[11]); // draw the letter Z draw_line(Axes_verts[12],Axes_verts[13]); draw_line(Axes_verts[13],Axes_verts[14]); draw_line(Axes_verts[14],Axes_verts[15]); for (i=0; i<16; i++) free_vert(Axes_verts[i]); }