00001
00002
00003
00004
00005
00006
00007 #ifndef BARRETTPRIMITIVE_H
00008 #define BARRETTPRIMITIVE_H
00009
00010 #include <GL/gl.h>
00011 #include <GL/glu.h>
00012 #include <GL/glut.h>
00013 #include <stdlib.h>
00014
00015 #include <Wm3TriMesh.h>
00016
00024 class GLBarrettPrimitive
00025 {
00026
00027 public:
00035 typedef struct{
00036 GLfloat ambient[3];
00037 GLfloat diffuse[3];
00038 GLfloat specular[3];
00039 GLfloat emissive[3];
00040 GLfloat shininess;
00041 GLfloat alpha;
00044 } MaterialColorProperties;
00045
00048 GLBarrettPrimitive(){};
00049
00052 virtual ~GLBarrettPrimitive(){};
00053
00058 virtual void draw() = 0;
00059
00065 void setMaterialColor(MaterialColorProperties *colProp);
00066
00067 Wm3::TriMesh* triMesh();
00068
00069 GLuint makeArrowRed(float length = 0.05, float width = 0.00125);
00070 GLuint makeArrow(float length = 0.05, float width = 0.00125);
00071
00072 protected:
00073 virtual void generateTriMesh() = 0;
00074 Wm3::TriMesh* CollisionTriMesh;
00075
00076 };
00077
00078
00079
00080
00081
00082
00083 inline void GLBarrettPrimitive::setMaterialColor(MaterialColorProperties *colProp)
00084 {
00085 GLfloat rgba[4];
00086 int i;
00087 rgba[3] = colProp->alpha;
00088
00089 for(i = 2; i >= 0; i--){
00090 rgba[i] = colProp->ambient[i];
00091 }
00092 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, rgba);
00093
00094 for(i = 2; i >= 0; i--){
00095 rgba[i] = colProp->diffuse[i];
00096 }
00097 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, rgba);
00098
00099 for(i = 2; i >= 0; i--){
00100 rgba[i] = colProp->specular[i];
00101 }
00102 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, rgba);
00103
00104 for(i = 2; i >= 0; i--){
00105 rgba[i] = colProp->emissive[i];
00106 }
00107 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, rgba);
00108
00109 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, colProp->shininess);
00110 }
00111
00112
00113 #endif