V Z-bufferu je vzdálenost jednotlivých pixelů (resp. odpovídajících bodů na povrchu objektů v prostoru). A jak postupně vykresluješ jednotlivé pixely objektů, tak skutečně vykreslíš jen ty, které jsou blíže, než to co tam bylo původně a aktualizuješ hodnotu v Z-bufferu (vzdálenost bodu).
Objekt máš definovaný trojúhelníky o třech vrcholech. Pro každý vrchol máš definován normálový vektor. Při vykreslování jednotlivých pixelů interpoluješ normály definujících vrcholů, získáváš normálu bodu/pixelu, podle které aplikuješ světlo na podkladovou barvu a dostaneš výslednou barvu pixelu.
S difůzním povrchem a kolmou projekcí celkem není co řešit. Netvrď, že při takovém úkolu za sebou nemáš dostatek teorie, abys měl představu, jak to řešit. S čím konkrétně si nevíš rady?