Example #1
0
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();
		}
	}

}