Quale sarebbe un buon modo per astrarre OpenGL-Concepts in un motore di gioco? [chiuso]

-4

Ho postato la stessa domanda a StackOverflow e Stackexchange ed entrambi sono stati convertiti in downsover in obliquo come "troppo ampio". Quindi forse questo sarà un posto migliore per questo.

Sto lavorando su un motore di rendering con i miei binding C # per OpenGL e ho un paio di domande riguardo ai costrutti di OpenGL e ai concetti di OOP. Poiché non voglio trattare direttamente i buffer ogni volta che eseguo il rendering di qualcosa, sarebbe opportuno creare una classe "Mesh" che gestisca i propri buffer.

Che tipo di struttura avrebbe senso per un motore di rendering che utilizza OpenGL?

Quali sono alcune delle classi che dovrei avere e qual è il loro scopo? (VAO, VBO, Shader)

Che tipo di informazioni dovrebbero essere accessibili a ciascuna delle classi? (Se un VAO gestisce il proprio shader?)

Esistono esempi di open source focalizzati sull'architettura di rendering semplice per come potrebbe funzionare?

I progetti esistenti come Ogre3D, Delta e Godot sono un modo troppo ingegnerizzato per il mio scopo dal momento che implementano più livelli di astrazione che si concentrano sullo sviluppo del gioco e mi piacerebbe cogliere l'effettivo aspetto di rendering di esso (es .: gestione dei buffer e degli shader).

Lo so, lo so. "Crea un gioco, non un motore". Ma fare un motore è esattamente quello che voglio. Voglio conoscere i dettagli di come un pixel / frammento appare sullo schermo prima di entrare nello sviluppo del gioco stesso.

Le risposte usando C ++ / C # sarebbero preferibili, ma ogni tipo di risposta è apprezzata! Grazie! :)

    
posta j8a2b0e7 11.05.2017 - 06:40
fonte

1 risposta

7

Non dovresti astrarre opengl, invece dovresti astrarre il tuo motore di rendering.

I componenti chiave stanno caricando una mesh, impostando i parametri per il rendering render, accodando la mesh per il rendering. Questi parametri avranno una diversa frequenza di cambiamento. La trasformazione della telecamera cambierà solo una volta per fotogramma, la trasformazione dell'oggetto (e la trasformazione di posa) cambierà per ogni oggetto, le proprietà del materiale sono da qualche parte tra di esse.

In questo modo puoi scambiare l'API sottostante da opengl a DX10 a vulkan a DX12.

    
risposta data 11.05.2017 - 11:20
fonte

Leggi altre domande sui tag