Attualmente sto scrivendo una libreria che astrae il rendering 3D e usa SharpDX e OpenTK come librerie grafiche. Il problema è che OpenTK e SharpDX hanno le proprie implementazioni di Vector2, Matrix, Quaternion e così via.
Ho trovato 3 possibili modi per affrontare questo problema.
-
La mia API deve avere sovraccarichi di funzione per entrambi i tipi matematici. Se voglio estendere il codice di rendering di base con caratteristiche di livello più elevato (come una classe Transform che gestisce la posizione, la rotazione e la scala) ho bisogno di preferire l'uno sull'altro o fornire un codice per entrambi i tipi matematici che non è ottimale.
-
Crea il mio tipo matematico che consente le conversioni tra i tipi SharpDX e OpenTK. Non ottimale neanche perché il codice matematico era già stato scritto due volte. Non dovrei inventare di nuovo la ruota.
-
Flat out usa solo uno a livello di API e converti solo se necessario. Con questo approccio mi legherei a una libreria che significa che se voglio usare il renderer OpenTK, ma l'API usa i tipi di matematica SharpDX, ho ancora bisogno di avere la libreria SharpDX in giro senza mai usare la parte "grafica" di esso .
Mi sento come l'opzione 2. risulterebbe nel codice di utilizzo più bello ma è il lavoro più richiesto. Sto cercando possibili soluzioni a questo problema oltre alle 3 opzioni che ho menzionato sopra.