Blender  V2.59
BSP_MeshDrawer.cpp
Go to the documentation of this file.
00001 
00029 #include "BSP_MeshDrawer.h"
00030 
00031 #include "BSP_TMesh.h"
00032 
00033 #if defined(WIN32) || defined(__APPLE__)
00034 #       ifdef WIN32
00035 #               include <windows.h>
00036 #               include <GL/gl.h>
00037 #               include <GL/glu.h>
00038 #       else // WIN32
00039 #               include <AGL/gl.h>
00040 #       endif // WIN32
00041 #else // defined(WIN32) || defined(__APPLE__)
00042 #       include <GL/gl.h>
00043 #       include <GL/glu.h>
00044 #endif // defined(WIN32) || defined(__APPLE__)
00045 
00046 #include <vector>
00047 
00048 using namespace std;
00049 
00050         void
00051 BSP_MeshDrawer::
00052 DrawMesh(
00053         BSP_TMesh &mesh,
00054         int render_mode
00055 ){
00056 
00057 
00058         if (render_mode == e_none) return;
00059 
00060         // decompose polygons into triangles.
00061 
00062         glEnable(GL_LIGHTING);
00063 
00064 
00065         if (render_mode == e_wireframe || render_mode == e_wireframe_shaded) {
00066 
00067                 glColor3f(0.0, 0.0, 0.0);
00068 
00069                 if (render_mode == e_wireframe) {
00070                         glDisable(GL_LIGHTING);
00071                 } else {
00072                         glEnable(GL_LIGHTING);
00073                 }
00074 
00075                 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
00076 
00077                 glEnable(GL_POLYGON_OFFSET_FILL);
00078                 glPolygonOffset(1.0,1.0);
00079 
00080                 glBegin(GL_TRIANGLES);
00081                         DrawPolies(mesh);
00082                 glEnd();
00083 
00084                 glColor3f(1.0, 1.0, 1.0);
00085                 glDisable(GL_LIGHTING);
00086                 glDisable(GL_POLYGON_OFFSET_FILL);
00087                 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
00088 
00089                 glBegin(GL_TRIANGLES);
00090                         DrawPolies(mesh);
00091                 glEnd();
00092                 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
00093         } else {
00094 
00095                 glEnable(GL_LIGHTING);
00096 
00097                 glBegin(GL_TRIANGLES);
00098                         DrawPolies(mesh);
00099                 glEnd();
00100         }
00101         
00102 
00103 }
00104 
00105 
00106         void
00107 BSP_MeshDrawer::
00108 DrawPolies(
00109         BSP_TMesh &mesh
00110 ){
00111 
00112         const vector<BSP_TVertex> & verts = mesh.VertexSet();
00113         const vector<BSP_TFace> &faces = mesh.FaceSet();
00114 
00115         // just draw the edges for now.
00116 
00117         vector<BSP_TVertex>::const_iterator vertex_it = verts.begin();
00118 
00119 
00120         vector<BSP_TFace>::const_iterator faces_it = faces.begin();
00121         vector<BSP_TFace>::const_iterator faces_end = faces.end();
00122 
00123         for (;faces_it != faces_end; ++faces_it ){      
00124 
00125                 glNormal3f(
00126                         faces_it->m_normal.x(),
00127                         faces_it->m_normal.y(),
00128                         faces_it->m_normal.z()
00129                 );
00130 
00131                 glVertex3f(
00132                         verts[faces_it->m_verts[0]].m_pos.x(),
00133                         verts[faces_it->m_verts[0]].m_pos.y(),
00134                         verts[faces_it->m_verts[0]].m_pos.z()
00135                 );
00136                 glVertex3f(
00137                         verts[faces_it->m_verts[1]].m_pos.x(),
00138                         verts[faces_it->m_verts[1]].m_pos.y(),
00139                         verts[faces_it->m_verts[1]].m_pos.z()
00140                 );
00141                 glVertex3f(
00142                         verts[faces_it->m_verts[2]].m_pos.x(),
00143                         verts[faces_it->m_verts[2]].m_pos.y(),
00144                         verts[faces_it->m_verts[2]].m_pos.z()
00145                 );
00146         }
00147 }
00148         
00149 
00150 
00151 
00152 
00153 
00154 
00155 
00156 
00157