|
Blender
V2.59
|
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