polyhedron.cpp

00001 #include "polyhedron.h"
00002 
00003 #include <util/gl.h>
00004 
00005 namespace shape
00006 {
00007 
00008   void cube(const Point3d& center, const Point3d& axis1_, const Point3d& axis2_, double size)
00009   {
00010     Point3d axis1 = util::normalized(axis1_);
00011     Point3d axis3 = util::normalized(axis1 ^ axis2_);
00012     Point3d axis2 = axis3 ^ axis1;
00013     axis1 *= size;
00014     axis2 *= size;
00015     axis3 *= size;
00016 
00017     Point3d c1 = center - (axis1 + axis2 + axis3)/2;
00018     Point3d c2 = c1 + axis1;
00019     Point3d c3 = c2 + axis2;
00020     Point3d c4 = c1 + axis2;
00021 
00022     Point3d c5 = c1 + axis3;
00023     Point3d c6 = c5 + axis1;
00024     Point3d c7 = c6 + axis2;
00025     Point3d c8 = c5 + axis2;
00026 
00027     glBegin(GL_QUADS);
00028 
00029     glNormal3dv((-axis2).c_data());
00030     glVertex3dv(c1.c_data());
00031     glVertex3dv(c2.c_data());
00032     glVertex3dv(c6.c_data());
00033     glVertex3dv(c5.c_data());
00034 
00035     glNormal3dv((axis1).c_data());
00036     glVertex3dv(c2.c_data());
00037     glVertex3dv(c3.c_data());
00038     glVertex3dv(c7.c_data());
00039     glVertex3dv(c6.c_data());
00040 
00041     glNormal3dv((axis2).c_data());
00042     glVertex3dv(c3.c_data());
00043     glVertex3dv(c4.c_data());
00044     glVertex3dv(c8.c_data());
00045     glVertex3dv(c7.c_data());
00046 
00047     glNormal3dv((-axis1).c_data());
00048     glVertex3dv(c4.c_data());
00049     glVertex3dv(c1.c_data());
00050     glVertex3dv(c5.c_data());
00051     glVertex3dv(c8.c_data());
00052 
00053     glNormal3dv((-axis3).c_data());
00054     glVertex3dv(c1.c_data());
00055     glVertex3dv(c4.c_data());
00056     glVertex3dv(c3.c_data());
00057     glVertex3dv(c2.c_data());
00058 
00059     glNormal3dv((axis3).c_data());
00060     glVertex3dv(c5.c_data());
00061     glVertex3dv(c6.c_data());
00062     glVertex3dv(c7.c_data());
00063     glVertex3dv(c8.c_data());
00064 
00065     glEnd();
00066   }
00067 
00068   void parallelepiped(const Point3d& corner, const Point3d& edge1, const Point3d& edge2, const Point3d& edge3)
00069   {
00070     Point3d norm12 = edge1 ^ edge2;
00071     Point3d norm23 = edge2 ^ edge3;
00072     Point3d norm13 = edge1 ^ edge3;
00073 
00074     Point3d c1 = corner;
00075     Point3d c2 = c1+edge1;
00076     Point3d c3 = c2+edge2;
00077     Point3d c4 = c1+edge2;
00078 
00079     Point3d c5 = c1+edge3;
00080     Point3d c6 = c5+edge1;
00081     Point3d c7 = c6+edge2;
00082     Point3d c8 = c5+edge2;
00083 
00084     glBegin(GL_QUADS);
00085 
00086     glNormal3dv((norm13).c_data());
00087     glVertex3dv(c1.c_data());
00088     glVertex3dv(c2.c_data());
00089     glVertex3dv(c6.c_data());
00090     glVertex3dv(c5.c_data());
00091 
00092     glNormal3dv((norm23).c_data());
00093     glVertex3dv(c2.c_data());
00094     glVertex3dv(c3.c_data());
00095     glVertex3dv(c7.c_data());
00096     glVertex3dv(c6.c_data());
00097 
00098     glNormal3dv((-norm13).c_data());
00099     glVertex3dv(c3.c_data());
00100     glVertex3dv(c4.c_data());
00101     glVertex3dv(c8.c_data());
00102     glVertex3dv(c7.c_data());
00103 
00104     glNormal3dv((-norm23).c_data());
00105     glVertex3dv(c4.c_data());
00106     glVertex3dv(c1.c_data());
00107     glVertex3dv(c5.c_data());
00108     glVertex3dv(c8.c_data());
00109 
00110     glNormal3dv((-norm12).c_data());
00111     glVertex3dv(c1.c_data());
00112     glVertex3dv(c4.c_data());
00113     glVertex3dv(c3.c_data());
00114     glVertex3dv(c2.c_data());
00115 
00116     glNormal3dv((norm12).c_data());
00117     glVertex3dv(c5.c_data());
00118     glVertex3dv(c6.c_data());
00119     glVertex3dv(c7.c_data());
00120     glVertex3dv(c8.c_data());
00121 
00122     glEnd();
00123   }
00124 
00125 }
00126 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Generated on Fri May 31 15:37:51 2013 for VVE by  doxygen 1.6.3