TL; DR: un motore è solo una raccolta di componenti riutilizzabili.
Muro di testo: i giochi memorizzano una rappresentazione del mondo, ad esempio avresti un'entità come una casa, che ha una maglia che definisce l'aspetto della sua geometria e una posizione.
Ora, probabilmente hai più di un'entità. Diciamo che abbiamo un personaggio controllato dal giocatore e alcune caselle. Quando il giocatore vuole muoversi, muovi il personaggio e controlli se si scontra con qualche scatola. È qui che entra in gioco la fisica. A seconda di come sono modellate la fisica, il personaggio potrebbe semplicemente camminare attraverso le scatole, fermarsi davanti alle scatole o spingere le scatole.
Intendiamoci, questo cambia solo lo stato interno del mondo di gioco.
Quindi, dopo aver calcolato il movimento e la fisica, avresti eseguito il rendering di una cornice, ad esempio disegnando lo stato attuale del mondo sullo schermo.
OpenGL e DirectX sono API grafiche, vengono utilizzate solo per eseguire il rendering di elementi (ad es. Il personaggio) sullo schermo.
Quindi, sostanzialmente stai dicendo a OpenGL / DirectX "Voglio disegnare il personaggio in posizione 1 e un riquadro in posizione 2, e ...".
Naturalmente, questa è una semplificazione eccessiva.
Comunque, dal momento che non vogliamo seguire questa procedura passo dopo passo tutto il tempo, inseriamo quella roba in funzioni e classi. Quindi, potremmo avere una fisica di classe che contiene tutte le funzioni necessarie per la simulazione fisica, o una classe di grafica che si interfaccia con l'API grafica e disegna le nostre entità. Et voilà, abbiamo un motore.