Je ne sais pas trop comment dire ça... Comme son nom l'indique, le COD est direct, alors que le COI est indirect.
Par exemple, Squall frappe Chatib, c'est direct. Qui Squall frappe-t-il ? Chatib.
À l'inverse, Sturm explique à Squall, c'est indirect : À Squall. Ou Prauron parle de foot, c'est indirect aussi : DE foot.
Il faut simplement te demander si le complément est directement lié au verbe ou s'il a besoin d'une préposition. Pour l'accord du participe passé, tu n'as pas besoin de rentrer dans les nuances purement théoriques entre complément indirect, complément second et compagnie. Soit c'est direct, soit ça ne l'est pas.
Squall écrit une lettre à Sturm : la lettre est le COD, et « à Sturm », ce n'est pas un complément direct. Ce qu'écrit Squall, c'est une lettre. Si tu veux mettre ta phrase au passif, ça donnera « une lettre est écrite par Squall », et pas « un Sturm est écrit par Squall ».
Je ne sais pas si c'est bien clair. Je ne sais pas trop comment expliquer ça.
Dans les deux versions de ton exemple, « la voiture a dépassé le camion », le camion est le COD du verbe dépasser. Il n'y a pas de préposition, rien. C'est on ne peut plus direct.
Pour l'accord, une fois que tu as identifié ton COD, il faut voir s'il est placé avant ou après l'auxiliaire avoir. Si c'est après, on n'accorde rien. Si c'est avant, on accorde le participe avec le COD.
Le camion a dépassé la voiture : aucun accord.
Le camion que la voiture a dépassé : on accorde avec le COD, c'est à dire le camion, qui est masculin. On laisse donc "dépassé".
La voiture que le camion a dépassée : on accorde avec le COD, c'est à dire la voiture. On met donc un e.
Attention à bien repérer quel complément correspond à quel verbe. Par exemple :
« La lettre que je t'ai écrite est illisible parce que j'étais bourré. »
Dans la phrase globale, la lettre est le sujet. Mais par rapport à écrire, dans la petite subordonnée, elle fait office de COD. 