284 fEnd(mesh_.faces_end());
288#if defined(OM_USE_OSG) && OM_USE_OSG
289 if (_draw_mode ==
"OpenSG Indices")
291 glEnableClientState(GL_VERTEX_ARRAY);
292 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
294 glEnableClientState(GL_NORMAL_ARRAY);
295 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
297 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
299 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
300 glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D());
301 glEnable(GL_TEXTURE_2D);
302 glBindTexture(GL_TEXTURE_2D, tex_id_);
303 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_);
306 glDrawElements(GL_TRIANGLES,
307 mesh_.osg_indices()->size(),
309 &mesh_.osg_indices()->getField()[0] );
311 glDisableClientState(GL_VERTEX_ARRAY);
312 glDisableClientState(GL_NORMAL_ARRAY);
313 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
318 if (_draw_mode ==
"Wireframe")
320 glBegin(GL_TRIANGLES);
321 for (; fIt!=fEnd; ++fIt)
323 fvIt = mesh_.cfv_iter(*fIt);
324 glVertex3fv( &mesh_.point(*fvIt)[0] );
326 glVertex3fv( &mesh_.point(*fvIt)[0] );
328 glVertex3fv( &mesh_.point(*fvIt)[0] );
333 else if (_draw_mode ==
"Solid Flat")
335 glBegin(GL_TRIANGLES);
336 for (; fIt!=fEnd; ++fIt)
338 glNormal3fv( &mesh_.normal(*fIt)[0] );
340 fvIt = mesh_.cfv_iter(*fIt);
341 glVertex3fv( &mesh_.point(*fvIt)[0] );
343 glVertex3fv( &mesh_.point(*fvIt)[0] );
345 glVertex3fv( &mesh_.point(*fvIt)[0] );
352 else if (_draw_mode ==
"Solid Smooth")
354 glEnableClientState(GL_VERTEX_ARRAY);
355 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
357 glEnableClientState(GL_NORMAL_ARRAY);
358 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
360 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
362 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
363 glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D());
364 glEnable(GL_TEXTURE_2D);
365 glBindTexture(GL_TEXTURE_2D, tex_id_);
366 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_);
369 glBegin(GL_TRIANGLES);
370 for (; fIt!=fEnd; ++fIt)
372 fvIt = mesh_.cfv_iter(*fIt);
373 glArrayElement(fvIt->idx());
375 glArrayElement(fvIt->idx());
377 glArrayElement(fvIt->idx());
381 glDisableClientState(GL_VERTEX_ARRAY);
382 glDisableClientState(GL_NORMAL_ARRAY);
383 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
385 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
387 glDisable(GL_TEXTURE_2D);
391 else if (_draw_mode ==
"Colored Vertices")
393 glEnableClientState(GL_VERTEX_ARRAY);
394 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
396 glEnableClientState(GL_NORMAL_ARRAY);
397 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
399 if ( mesh_.has_vertex_colors() )
401 glEnableClientState( GL_COLOR_ARRAY );
402 glColorPointer(3, GL_UNSIGNED_BYTE, 0,mesh_.vertex_colors());
405 glBegin(GL_TRIANGLES);
406 for (; fIt!=fEnd; ++fIt)
408 fvIt = mesh_.cfv_iter(*fIt);
409 glArrayElement(fvIt->idx());
411 glArrayElement(fvIt->idx());
413 glArrayElement(fvIt->idx());
417 glDisableClientState(GL_VERTEX_ARRAY);
418 glDisableClientState(GL_NORMAL_ARRAY);
419 glDisableClientState(GL_COLOR_ARRAY);
423 else if (_draw_mode ==
"Solid Colored Faces")
425 glEnableClientState(GL_VERTEX_ARRAY);
426 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
428 glEnableClientState(GL_NORMAL_ARRAY);
429 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
431 glBegin(GL_TRIANGLES);
432 for (; fIt!=fEnd; ++fIt)
436 fvIt = mesh_.cfv_iter(*fIt);
437 glArrayElement(fvIt->idx());
439 glArrayElement(fvIt->idx());
441 glArrayElement(fvIt->idx());
445 glDisableClientState(GL_VERTEX_ARRAY);
446 glDisableClientState(GL_NORMAL_ARRAY);
450 else if (_draw_mode ==
"Smooth Colored Faces")
452 glEnableClientState(GL_VERTEX_ARRAY);
453 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
455 glEnableClientState(GL_NORMAL_ARRAY);
456 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
458 glBegin(GL_TRIANGLES);
459 for (; fIt!=fEnd; ++fIt)
463 fvIt = mesh_.cfv_iter(*fIt);
464 glArrayElement(fvIt->idx());
466 glArrayElement(fvIt->idx());
468 glArrayElement(fvIt->idx());
472 glDisableClientState(GL_VERTEX_ARRAY);
473 glDisableClientState(GL_NORMAL_ARRAY);
477 else if ( _draw_mode ==
"Strips'n VertexArrays" )
479 glEnableClientState(GL_VERTEX_ARRAY);
480 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
482 glEnableClientState(GL_NORMAL_ARRAY);
483 glNormalPointer(GL_FLOAT, 0, mesh_.vertex_normals());
485 if ( tex_id_ && mesh_.has_vertex_texcoords2D() )
487 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
488 glTexCoordPointer(2, GL_FLOAT, 0, mesh_.texcoords2D());
489 glEnable(GL_TEXTURE_2D);
490 glBindTexture(GL_TEXTURE_2D, tex_id_);
491 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_mode_);
494 typename MyStripifier::StripsIterator strip_it = strips_.begin();
495 typename MyStripifier::StripsIterator strip_last = strips_.end();
498 for (; strip_it!=strip_last; ++strip_it)
500 glDrawElements(GL_TRIANGLE_STRIP,
501 static_cast<GLsizei
>(strip_it->size()), GL_UNSIGNED_INT, &(*strip_it)[0] );
504 glDisableClientState(GL_VERTEX_ARRAY);
505 glDisableClientState(GL_NORMAL_ARRAY);
506 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
510 else if (_draw_mode ==
"Show Strips" && strips_.is_valid() )
512 typename MyStripifier::StripsIterator strip_it = strips_.begin();
513 typename MyStripifier::StripsIterator strip_last = strips_.end();
517 int base = (int)cmax-range;
522 int rcol=0, gcol=dgcol, bcol=dbcol+dbcol;
525 for (; strip_it!=strip_last; ++strip_it)
527 typename MyStripifier::IndexIterator idx_it = strip_it->begin();
528 typename MyStripifier::IndexIterator idx_last = strip_it->end();
530 rcol = (rcol+drcol) % range;
531 gcol = (gcol+dgcol) % range;
532 bcol = (bcol+dbcol) % range;
534 glBegin(GL_TRIANGLE_STRIP);
535 glColor3f((rcol+base)/cmax, (gcol+base)/cmax, (bcol+base)/cmax);
536 for ( ;idx_it != idx_last; ++idx_it )
540 glColor3f(1.0, 1.0, 1.0);
544 else if( _draw_mode ==
"Points" )
546 glEnableClientState(GL_VERTEX_ARRAY);
547 glVertexPointer(3, GL_FLOAT, 0, mesh_.points());
549 if (mesh_.has_vertex_colors() && use_color_)
551 glEnableClientState(GL_COLOR_ARRAY);
552 glColorPointer(3, GL_UNSIGNED_BYTE, 0, mesh_.vertex_colors());
555 glDrawArrays( GL_POINTS, 0,
static_cast<GLsizei
>(mesh_.n_vertices()) );
556 glDisableClientState(GL_VERTEX_ARRAY);
557 glDisableClientState(GL_COLOR_ARRAY);