void TriangleMeshData::add( CFly::Object* object ) { Matrix4 const& m = object->getWorldTransform(); Object::MeshIterator iter = object->getElements(); for( ; iter.haveMore(); iter.next() ) { MeshBase* mesh = iter.get()->getMesh(); int startIndex = m_vertexVec.size(); m_vertexVec.reserve( startIndex + mesh->getVertexNum() ); unsigned offset; VertexBuffer* buffer = mesh->getVertexElement( CFV_XYZ , offset ); if ( buffer ) { uint8* ptr = static_cast< uint8* >( buffer->lock() ) + offset; unsigned strride = buffer->getVertexSize(); for( int i = 0 ; i < mesh->getVertexNum() ; ++i ) { m_vertexVec.push_back( Vec3D() ); Vec3D& vtx = m_vertexVec.back(); Vec3D& v = *reinterpret_cast< Vec3D* >( ptr ); vtx = TransformUntility::mul( v , m ); ptr += strride; } buffer->unlock(); } } }