Karna was consistently envious of the Pandavas, especially Arjuna. He lied to get training from Parasurama and later tried to humiliate Arjuna at his graduation ceremony. In addition there was his misconduct with Draupadi and his refusal to accept Krishna's instructions. On more than one occasion Karna ran away from the battlefield leaving his friends and army exposed. In the Mahabharata war, he refused to fight along side Bhisma because he did not want to share the glory. His charity etc. was the result of vows he had taken to enhance his own material position.
Though he had excellent parentage, namely Kunti and Surya, because he was conceived out of lust, fear and anger, his character was thus shaped. Apparently after summoning the Sun god, Kunti became fearful of the consequences, but also very much attracted to the Sun god (who was angry at being summoned trivially). During the time of pregnancy he was concealed, thus there were no purificatory rites (samskaras) performed - thus shaping Karna's character.
Most importantly, we can see through his association with Duryodhana (who was obviously evil), Karna's character became debased.
(H.H. Hridyananda Goswami, quoted by H.H. Romapada Swami's Inquiries Into the Absolute, Digest 49)