From 69f5e5c5e564f2050de61d88e1c4db16ec68b7bf Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 10 Dec 2008 10:13:58 +0000 Subject: [PATCH] From Andreas Goebel, (submitted by Paul Martz) "A fix for the FLT exporter. This change adds support for normals with OVERALL binding (and improves support for normals with PER_PRIMITIVE binding -- still not correct, but at least it doesn't index off the end of the array anymore)." --- .../OpenFlight/VertexPaletteManager.cpp | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/osgPlugins/OpenFlight/VertexPaletteManager.cpp b/src/osgPlugins/OpenFlight/VertexPaletteManager.cpp index 77fdada98..0b559a346 100644 --- a/src/osgPlugins/OpenFlight/VertexPaletteManager.cpp +++ b/src/osgPlugins/OpenFlight/VertexPaletteManager.cpp @@ -279,33 +279,47 @@ VertexPaletteManager::writeRecords( const osg::Vec3dArray* v, const osg::Vec4Arr _vertices->writeInt16( flags ); // Flags _vertices->writeVec3d( (*v)[ idx ] ); // Vertex - // Now write record-specific field. + // Now write record-specific fields. switch( recType ) { case VERTEX_C: + { _vertices->writeInt32( packedColor ); // Packed color _vertices->writeUInt32( 0 ); // Vertex color index break; + } case VERTEX_CN: - _vertices->writeVec3f( (*n)[ idx ] ); // Normal + { + if (!normalPerVertex) // Normal + _vertices->writeVec3f( (*n)[ 0 ] ); + else + _vertices->writeVec3f( (*n)[ idx ] ); _vertices->writeInt32( packedColor ); // Packed color _vertices->writeUInt32( 0 ); // Vertex color index if (_fltOpt.getFlightFileVersionNumber() > ExportOptions::VERSION_15_7) _vertices->writeUInt32( 0 ); // Reserved break; + } case VERTEX_CNT: - _vertices->writeVec3f( (*n)[ idx ] ); // Normal + { + if (!normalPerVertex) // Normal + _vertices->writeVec3f( (*n)[ 0 ] ); + else + _vertices->writeVec3f( (*n)[ idx ] ); _vertices->writeVec2f( (*t)[ idx ] ); // Tex coord _vertices->writeInt32( packedColor ); // Packed color _vertices->writeUInt32( 0 ); // Vertex color index _vertices->writeUInt32( 0 ); // Reserved break; + } case VERTEX_CT: + { _vertices->writeVec2f( (*t)[ idx ] ); // Tex coord _vertices->writeInt32( packedColor ); // Packed color _vertices->writeUInt32( 0 ); // Vertex color index break; } + } } }