621年(武德四年)5月,秦王李世民大败窦建德,王世充失势降唐,唐军进驻洛阳。
关中两面威胁基本解除后,唐军进攻目标指向中原。武德三年(620年)7月,秦王率军东进,第一个劲敌就是王世充。年末,汴州、荥州、隋州、许州、亳州、阳城等地,全部被唐军占领,王世充的补给线,基本被切断。自此,秦王下令向东都发起进攻,进围洛阳宫城。唐军昼夜冲杀,城中守卫甚严,围攻旬日不下。王世充势穷力竭,向窦建德求救。窦建德认为“郑亡则夏不能独立”,621年3月,亲自带兵30万,挺进中原,西救洛阳。唐军将领闻讯,对战局看法不一,封德彝等主张退兵以避其锋,薛收主张先破窦建德,洛阳可不攻自破。秦王采纳薛收的意见,令齐王李元吉与屈突通等继续围困东都,自己则亲率徐世勋、秦叔宝、尉迟恭等,至武牢阻击窦建德。窦建德被阻于武牢,其部下凌敬建议出兵唐军之后,震撼关中,以解洛阳之围,建德未从。拟俟唐军粮草用尽,牧马于河北时袭武牢。秦王察敌形势,留马千余匹于河北以诱之。建德全军出动,列阵20里,自辰至午士卒饥倦,唐军突袭,大败之,窦建德受伤被俘。王世充只得率人投降,唐兵进入洛阳。7月,秦王至长安,献俘于太庙。诏赦王世充为庶人,徙蜀;斩窦建德。