Distributed Virtual Environments: from Client Server to Cloud and P2P Architectures