Já vi muitas perguntas nessa área, mas não exatamente, então peço desculpas se for uma duplicata.
Estou fazendo um pequeno jogo 3D. Bem, para ser honesto, é apenas um pequeno projeto de hobby e provavelmente não se tornará um jogo real. Ficarei feliz em fazer uma boa demonstração gráfica e aprender sobre renderização em 3D e design em c ++.
Minha intenção é usar o direct3d9 para renderizar, pois tenho pouca experiência com ele e parece atender aos meus requisitos. No entanto, se eu aprendi uma coisa como programador, é perguntar " existe alguma razão concebível para que esse componente possa ser substituído por uma implementação diferente " e se a resposta for afirmativa, preciso criar uma abstração e interface adequadas para esse componente . Portanto, mesmo que eu pretenda implantar o d3d9, preciso criar uma interface 3D que possa ser implementada para o d3d11, opengl ...
Minha pergunta então é em que nível é melhor fazer isso? Eu estou pensando que uma interface capaz de criar e desenhar mais tarde
- Buffers de vértice e buffers de índice
- Texturas
- "Shaders" de vértice e pixel
- Alguma representação do estado do desenho (modos de mesclagem etc ...)
Em outras palavras, uma interface de nível bastante baixo, onde meu código para desenhar, por exemplo, um modelo animado usaria a interface para obter buffers de vértice abstratos etc.
A alternativa é fazer isso em um nível superior, onde a interface possa desenhar objetos, animações, paisagens, etc., e implementá-los para cada sistema. Parece mais trabalho, mas acho mais flexível.
Então, na verdade, essa é minha pergunta: ao abstrair o sistema de desenho, qual o nível de interface que funciona melhor?