📄 meshviewerwidgett.cc
字号:
if ( tex_id_ && mesh_.has_vertex_texcoords2D() ) { glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D()); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, tex_id_); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_); } glBegin(GL_TRIANGLES); for (; fIt!=fEnd; ++fIt) { fvIt = mesh_.cfv_iter(fIt.handle()); glArrayElement(fvIt.handle().idx()); ++fvIt; glArrayElement(fvIt.handle().idx()); ++fvIt; glArrayElement(fvIt.handle().idx()); } glEnd(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); if ( tex_id_ && mesh_.has_vertex_texcoords2D() ) { glDisable(GL_TEXTURE_2D); } } else if (_draw_mode == "Colored") // ---------------------------------------- { glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, mesh_.points()); glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals()); if ( mesh_.has_vertex_colors() ) { glEnableClientState( GL_COLOR_ARRAY ); glColorPointer(3, GL_UNSIGNED_BYTE, 0,mesh_.vertex_colors()); } glBegin(GL_TRIANGLES); for (; fIt!=fEnd; ++fIt) { fvIt = mesh_.cfv_iter(fIt.handle()); glArrayElement(fvIt.handle().idx()); ++fvIt; glArrayElement(fvIt.handle().idx()); ++fvIt; glArrayElement(fvIt.handle().idx()); } glEnd(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_COLOR_ARRAY); } else if (_draw_mode == "Colored Faces") // ---------------------------------- { glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, mesh_.points()); glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals()); glBegin(GL_TRIANGLES); for (; fIt!=fEnd; ++fIt) { glColor( fIt.handle() ); fvIt = mesh_.cfv_iter(fIt.handle()); glArrayElement(fvIt.handle().idx()); ++fvIt; glArrayElement(fvIt.handle().idx()); ++fvIt; glArrayElement(fvIt.handle().idx()); } glEnd(); glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); } else if ( _draw_mode == "Strips'n VertexArrays" ) // ------------------------- { glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, mesh_.points()); glEnableClientState(GL_NORMAL_ARRAY); glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals()); if ( tex_id_ && mesh_.has_vertex_texcoords2D() ) { glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D()); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, tex_id_); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_); } typename MyStripifier::StripsIterator strip_it = strips_.begin(); typename MyStripifier::StripsIterator strip_last = strips_.end(); // Draw all strips for (; strip_it!=strip_last; ++strip_it) { glDrawElements(GL_TRIANGLE_STRIP, strip_it->size(), GL_UNSIGNED_INT, &(*strip_it)[0] ); } glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); } else if (_draw_mode == "Show Strips" && strips_.is_valid() ) // ------------- { typename MyStripifier::StripsIterator strip_it = strips_.begin(); typename MyStripifier::StripsIterator strip_last = strips_.end(); float cmax = 256.0f; int range = 220; int base = (int)cmax-range; int drcol = 13; int dgcol = 31; int dbcol = 17; int rcol=0, gcol=dgcol, bcol=dbcol+dbcol; // Draw all strips for (; strip_it!=strip_last; ++strip_it) { typename MyStripifier::IndexIterator idx_it = strip_it->begin(); typename MyStripifier::IndexIterator idx_last = strip_it->end(); rcol = (rcol+drcol) % range; gcol = (gcol+dgcol) % range; bcol = (bcol+dbcol) % range; glBegin(GL_TRIANGLE_STRIP); glColor3f((rcol+base)/cmax, (gcol+base)/cmax, (bcol+base)/cmax); for ( ;idx_it != idx_last; ++idx_it ) glVertex3fv( &mesh_.point( OM_TYPENAME Mesh::VertexHandle(*idx_it))[0] ); glEnd(); } glColor3f(1.0, 1.0, 1.0); } else if( _draw_mode == "Points" ) // ----------------------------------------- { glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, mesh_.points()); glDrawArrays( GL_POINTS, 0, mesh_.n_vertices() ); glDisableClientState(GL_VERTEX_ARRAY); }}//-----------------------------------------------------------------------------template <typename M>void MeshViewerWidgetT<M>::draw_scene(const std::string& _draw_mode){ if ( ! mesh_.n_vertices() ) return; #if defined(OM_USE_OSG) && OM_USE_OSG else if ( _draw_mode == "OpenSG Indices") { glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); draw_openmesh( _draw_mode ); } else#endif if ( _draw_mode == "Points" ) { glDisable(GL_LIGHTING); draw_openmesh(_draw_mode); } else if (_draw_mode == "Wireframe") { glDisable(GL_LIGHTING); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); draw_openmesh(_draw_mode); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } else if ( _draw_mode == "Hidden-Line" ) { glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glDepthRange(0.01, 1.0); draw_openmesh("Solid Smooth"); glDisable(GL_LIGHTING); glPolygonMode( GL_FRONT_AND_BACK, GL_LINE); glColor4f( 0.4f, 0.4f, 0.4f, 1.0f ); glDepthRange( 0.0, 1.0 ); draw_openmesh( "Wireframe" ); glPolygonMode( GL_FRONT_AND_BACK, GL_FILL); } else if (_draw_mode == "Solid Flat") { glEnable(GL_LIGHTING); glShadeModel(GL_FLAT); draw_openmesh(_draw_mode); } else if (_draw_mode == "Solid Smooth" || _draw_mode == "Strips'n VertexArrays" ) { glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); draw_openmesh(_draw_mode); } else if (_draw_mode == "Show Strips") { glDisable(GL_LIGHTING); draw_openmesh(_draw_mode); } else if (_draw_mode == "Colored" ) { glDisable(GL_LIGHTING); draw_openmesh(_draw_mode); } else if (_draw_mode == "Colored Faces" ) { glDisable(GL_LIGHTING); draw_openmesh(_draw_mode); }}//-----------------------------------------------------------------------------#define TEXMODE( Mode ) \ tex_mode_ = Mode; std::cout << "Texture mode set to " << #Mode << std::endltemplate <typename M>void MeshViewerWidgetT<M>::keyPressEvent( QKeyEvent* _event){ switch( _event->key() ) { case Key_I: std::cout << "\n# Vertices : " << mesh_.n_vertices() << std::endl; std::cout << "# Edges : " << mesh_.n_edges() << std::endl; std::cout << "# Faces : " << mesh_.n_faces() << std::endl; std::cout << "binary input : " << opt_.check(opt_.Binary) << std::endl; std::cout << "swapped input : " << opt_.check(opt_.Swap) << std::endl; std::cout << "vertex normal : " << opt_.check(opt_.VertexNormal) << std::endl; std::cout << "vertex texcoord: " << opt_.check(opt_.VertexTexCoord) << std::endl; std::cout << "vertex color : " << opt_.check(opt_.VertexColor) << std::endl; this->QGLViewerWidget::keyPressEvent( _event ); break; case Key_T: switch( tex_mode_ ) { case GL_MODULATE: TEXMODE(GL_DECAL); break; case GL_DECAL: TEXMODE(GL_BLEND); break; case GL_BLEND: TEXMODE(GL_REPLACE); break; case GL_REPLACE: TEXMODE(GL_MODULATE); break; } updateGL(); break; default: this->QGLViewerWidget::keyPressEvent( _event ); }}#undef TEXMODE//=============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -