287 fEnd(mesh_.faces_end());
291#if defined(OM_USE_OSG) && OM_USE_OSG
292 if (_draw_mode ==
"OpenSG Indices")
294 glEnableClientState(GL_VERTEX_ARRAY);
295 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
297 glEnableClientState(GL_NORMAL_ARRAY);
298 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
300 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
302 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
303 glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D());
304 glEnable(GL_TEXTURE_2D);
305 glBindTexture(GL_TEXTURE_2D, tex_id_);
306 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_);
309 glDrawElements(GL_TRIANGLES,
310 mesh_.osg_indices()->size(),
312 &mesh_.osg_indices()->getField()[0] );
314 glDisableClientState(GL_VERTEX_ARRAY);
315 glDisableClientState(GL_NORMAL_ARRAY);
316 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
321 if (_draw_mode ==
"Wireframe")
323 glBegin(GL_TRIANGLES);
324 for (; fIt!=fEnd; ++fIt)
326 fvIt = mesh_.cfv_iter(*fIt);
327 glVertex3fv( &mesh_.point(*fvIt)[0] );
329 glVertex3fv( &mesh_.point(*fvIt)[0] );
331 glVertex3fv( &mesh_.point(*fvIt)[0] );
336 else if (_draw_mode ==
"Solid Flat")
338 glBegin(GL_TRIANGLES);
339 for (; fIt!=fEnd; ++fIt)
341 glNormal3fv( &mesh_.normal(*fIt)[0] );
343 fvIt = mesh_.cfv_iter(*fIt);
344 glVertex3fv( &mesh_.point(*fvIt)[0] );
346 glVertex3fv( &mesh_.point(*fvIt)[0] );
348 glVertex3fv( &mesh_.point(*fvIt)[0] );
355 else if (_draw_mode ==
"Solid Smooth")
357 glEnableClientState(GL_VERTEX_ARRAY);
358 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
360 glEnableClientState(GL_NORMAL_ARRAY);
361 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
363 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
365 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
366 glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D());
367 glEnable(GL_TEXTURE_2D);
368 glBindTexture(GL_TEXTURE_2D, tex_id_);
369 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_);
372 glBegin(GL_TRIANGLES);
373 for (; fIt!=fEnd; ++fIt)
375 fvIt = mesh_.cfv_iter(*fIt);
376 glArrayElement(fvIt->idx());
378 glArrayElement(fvIt->idx());
380 glArrayElement(fvIt->idx());
384 glDisableClientState(GL_VERTEX_ARRAY);
385 glDisableClientState(GL_NORMAL_ARRAY);
386 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
388 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
390 glDisable(GL_TEXTURE_2D);
394 else if (_draw_mode ==
"Colored Vertices")
396 glEnableClientState(GL_VERTEX_ARRAY);
397 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
399 glEnableClientState(GL_NORMAL_ARRAY);
400 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
402 if ( mesh_.has_vertex_colors() )
404 glEnableClientState( GL_COLOR_ARRAY );
405 glColorPointer(3, GL_UNSIGNED_BYTE, 0,mesh_.vertex_colors());
408 glBegin(GL_TRIANGLES);
409 for (; fIt!=fEnd; ++fIt)
411 fvIt = mesh_.cfv_iter(*fIt);
412 glArrayElement(fvIt->idx());
414 glArrayElement(fvIt->idx());
416 glArrayElement(fvIt->idx());
420 glDisableClientState(GL_VERTEX_ARRAY);
421 glDisableClientState(GL_NORMAL_ARRAY);
422 glDisableClientState(GL_COLOR_ARRAY);
426 else if (_draw_mode ==
"Solid Colored Faces")
428 glEnableClientState(GL_VERTEX_ARRAY);
429 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
431 glEnableClientState(GL_NORMAL_ARRAY);
432 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
434 glBegin(GL_TRIANGLES);
435 for (; fIt!=fEnd; ++fIt)
439 fvIt = mesh_.cfv_iter(*fIt);
440 glArrayElement(fvIt->idx());
442 glArrayElement(fvIt->idx());
444 glArrayElement(fvIt->idx());
448 glDisableClientState(GL_VERTEX_ARRAY);
449 glDisableClientState(GL_NORMAL_ARRAY);
453 else if (_draw_mode ==
"Smooth Colored Faces")
455 glEnableClientState(GL_VERTEX_ARRAY);
456 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
458 glEnableClientState(GL_NORMAL_ARRAY);
459 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
461 glBegin(GL_TRIANGLES);
462 for (; fIt!=fEnd; ++fIt)
466 fvIt = mesh_.cfv_iter(*fIt);
467 glArrayElement(fvIt->idx());
469 glArrayElement(fvIt->idx());
471 glArrayElement(fvIt->idx());
475 glDisableClientState(GL_VERTEX_ARRAY);
476 glDisableClientState(GL_NORMAL_ARRAY);
480 else if ( _draw_mode ==
"Strips'n VertexArrays" )
482 glEnableClientState(GL_VERTEX_ARRAY);
483 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
485 glEnableClientState(GL_NORMAL_ARRAY);
486 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
488 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
490 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
491 glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D());
492 glEnable(GL_TEXTURE_2D);
493 glBindTexture(GL_TEXTURE_2D, tex_id_);
494 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_);
497 typename MyStripifier::StripsIterator strip_it = strips_.begin();
498 typename MyStripifier::StripsIterator strip_last = strips_.end();
501 for (; strip_it!=strip_last; ++strip_it)
503 glDrawElements(GL_TRIANGLE_STRIP,
504 static_cast<GLsizei
>(strip_it->size()), GL_UNSIGNED_INT, &(*strip_it)[0] );
507 glDisableClientState(GL_VERTEX_ARRAY);
508 glDisableClientState(GL_NORMAL_ARRAY);
509 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
513 else if (_draw_mode ==
"Show Strips" && strips_.is_valid() )
515 typename MyStripifier::StripsIterator strip_it = strips_.begin();
516 typename MyStripifier::StripsIterator strip_last = strips_.end();
520 int base = (int)cmax-range;
525 int rcol=0, gcol=dgcol, bcol=dbcol+dbcol;
528 for (; strip_it!=strip_last; ++strip_it)
530 typename MyStripifier::IndexIterator idx_it = strip_it->begin();
531 typename MyStripifier::IndexIterator idx_last = strip_it->end();
533 rcol = (rcol+drcol) % range;
534 gcol = (gcol+dgcol) % range;
535 bcol = (bcol+dbcol) % range;
537 glBegin(GL_TRIANGLE_STRIP);
538 glColor3f((rcol+base)/cmax, (gcol+base)/cmax, (bcol+base)/cmax);
539 for ( ;idx_it != idx_last; ++idx_it )
543 glColor3f(1.0, 1.0, 1.0);
547 else if( _draw_mode ==
"Points" )
549 glEnableClientState(GL_VERTEX_ARRAY);
550 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
552 if (mesh_.has_vertex_colors() && use_color_)
554 glEnableClientState(GL_COLOR_ARRAY);
555 glColorPointer(3, GL_UNSIGNED_BYTE, 0, mesh_.vertex_colors());
558 glDrawArrays( GL_POINTS, 0,
static_cast<GLsizei
>(mesh_.n_vertices()) );
559 glDisableClientState(GL_VERTEX_ARRAY);
560 glDisableClientState(GL_COLOR_ARRAY);