Estou aprendendo programação gráfica há algum tempo usando o OpenGL e Linux. Estou bastante familiarizado com a maioria dos conceitos, mas gostaria muito de aprofundar meus conhecimentos e, eventualmente, seguir uma carreira em desenvolvimento de jogos, especialmente no desenvolvimento de mecanismos de jogos.
Até agora, parece-me que a maioria dos estúdios de jogos cria jogos para Windows usando o DirectX.
Edit: Eu sei que a pergunta OpenGL vs DirectX já foi feita aqui antes, mas não encontrei uma resposta na perspectiva que desejo.
Edit 2: Depois de ler todas as respostas / comentários, decidi continuar aprofundando os gráficos com o OpenGL / GLSL, mas vou tentar brincar com o DX também, apenas para ter um entendimento básico da API. Gostaria de agradecer a todos pelas respostas e insights que você me deu.
fonte
Respostas:
Realmente não importa. Os conceitos principais são os mesmos em ambos, especialmente agora que os pixel shaders são a norma. E como a maioria dos jogos é multiplataforma, eles provavelmente usarão um subconjunto de recursos semelhantes nos dois idiomas. Contanto que você possa escrever shaders em glsl ou hlsl, você ficará bem.
Dito isto, o número de posições de "desenvolvimento de mecanismos de jogos" por aí é pequeno. A maioria das empresas usa algo da prateleira. Para as posições que existem, menos ainda são de nível de entrada. A maioria dos programadores de jogos iniciantes não escreve nenhum código relacionado a gráficos (exceto talvez shaders) porque tudo foi abstraído.
fonte
Tudo depende do trabalho que você deseja / receberá. Você provavelmente pensa em um emprego no mercado de PCs onde o DX é o rei. Lembre-se de que a maioria das empresas AAA visa o mercado de console, onde as APIs são bastante específicas.
O PS3, por exemplo, possui extensões proprietárias para sua implementação OpenGL ES.
O OpenGL está crescendo no espaço móvel. Agora está disponível em todas as plataformas modernas, exceto no Windows Phone 7.
Atualmente, apenas o OpenGL ES está disponível neste espaço. Mas mais chips PowerVR poderosos estão chegando com suporte para OpenGL 4 e DX11.
Suas habilidades em OpenGL são de ouro. Você pode reconverter para o DX para conseguir um trabalho que exija isso. Entretanto, lembre-se que o OpenGL é o rei na quantidade de dispositivos e plataformas em que está disponível.
Editar : Além disso, mais e mais empresas tendem a usar os mecanismos existentes e, muitas vezes, até os principais desenvolvedores de jogos são cada vez mais selecionados nas APIs de baixo nível. É sempre melhor ter um bom conhecimento das APIs nativas quando você enfrenta bugs e comportamento estranho em plataformas específicas. Mas tudo se resume aos conceitos e, como outros apontaram, o DX e o OpenGL no núcleo exigirão conhecimento dos mesmos conceitos.
Edit : Como você já está familiarizado com o OpenGL e provavelmente com shaders, tente o OpenCL ... Essa API tem o potencial de se tornar a próxima grande novidade na computação paralela.
Estou mencionando isso porque os kernels do OpenCL usam tipos de dados que são interoperáveis com o OpenGL e são simples de entender para os desenvolvedores do OpenGL. Dê uma olhada nisso e veja se você pode adquirir alguma experiência com uma ótima solução de computação geral (atualmente sendo integrada à física de balas, por exemplo).
fonte
Concordo que isso realmente não importa qual API você aprende. É importante conhecer os conceitos básicos.
Ao analisar o desenvolvimento de jogos, o Windows não é a única plataforma de destino. Como ouvi dizer, a Apple está crescendo como plataforma de destino, mas os consoles também são realmente importantes. Os consoles normalmente têm sua própria API gráfica especializada (acho que eles estão fazendo isso apenas para nos incomodar). Embora as APIs do console tendam a ter mais em comum com o OpenGL do que com o DirectX, ainda não há uma grande diferença.
Vá com o que for melhor para você.
fonte
E a perspectiva de um professor de desenvolvimento de jogos?
Se você possui os conceitos básicos do OpenGL, então, ALL, aventure-se no mundo do DirectX (observe o DX) que o Dx9 ainda está sendo usado no desenvolvimento por razões de compatibilidade, pois plataformas mais antigas (especificamente XP) não suportam os gráficos mais recentes gasoduto em Dx10 e Dx11. (isso deve ser uma recomendação para iniciar no Dx9 e depois observar as diferenças em Dx10 e 11 ao longo do progresso). Isso também o tornará mais completo.
O ideal é que você gaste algum tempo de qualidade em HLSL e CG (observe que essas duas linguagens de sombreador aparentemente diferentes são na verdade a mesma linguagem (uma marca da Microsoft e a outra da Nvidia) entendendo como os sombreadores de vértice e fragmento (pixel) funcionam. ser um grande trunfo para você e qualquer empresa de jogos em que trabalha (supondo que você esteja trabalhando na renderização de sistemas ou subsistemas e não no código da IA. ;-)
O Ogre3D é um mecanismo de renderização de código aberto que suporta os dois subsistemas gráficos (OpenGL / DirectX) e é usado em muitos jogos ... porque a fonte está disponível gratuitamente, você pode explorar e ver, por comparação, como as chamadas para o OpenGL diferem das chamadas para o OpenGL DirectX.
Eu também recomendaria que, porque você já passou algum tempo no OpenGL, cutucou o WebGL, que parece explodir em um futuro muito próximo.
Espero que ajude!
fonte
Li recentemente que John Carmack recomenda o DirectX pelo simples fato de que a Microsoft, por algum tempo, adotou o openGL e, ao fazer isso, criou um produto competitivo e empurrou o envelope, enquanto o pessoal do openGL passava algum tempo discutindo e fazendo o design pelo comitê, permitindo o DirectX tornar-se polido e, acho, mais fácil de trabalhar, mas mantendo o openGL.
http://www.tomshardware.com/news/john-Carmack-DirectX-OpenGL-API-Doom.12372.html
Talvez outra opção a considerar se você gosta de gráficos em geral e para o que é worith é o que está acontecendo no espaço incorporado.
Trabalho no espaço incorporado usando Linux e WinCE. Eu era ex-arquiteto Ford SYNC (estava lá por 6 anos) e agora trabalho na CUE da GM (resposta da GM ao Ford SYNC). O Ford SYNC não usa openGL ou DirectX. Ford, em vez disso, optou pelo script Flash & Action; o que o Flash faz sob o capô, não tenho certeza, mas é lento como o inferno; A JD Powers deu uma nota baixa. O CUE da GM é todo Linux e openGL ES e, embora o GM CUE tenha um processador iMX mais recente, o desempenho das animações no openGL no Linux é impressionante. CUE / openGL é muito mais rápido. Mais uma vez, a Ford aleijou seu sistema com o Adobe Flash.
Portanto, se você deseja entrar em jogos, mas está preocupado com a natureza competitiva, mas ainda ama esse tipo de trabalho, talvez veja opções que ampliam seu currículo. Foi minha experiência que, pelo menos no mundo incorporado, o WinCE parece não usar tanto o DirectX. (O WinCE tem uma API ligeiramente diferente do NT pode fazer parte desse motivo). O OpenGL está presente em todo o mundo incorporado e as pessoas estão fazendo mais coisas, como tablets, o entretenimento informativo para automóveis está quente no momento e, claro, os smartphones ...
fonte
Eu diria que provavelmente é bom em seu currículo poder dizer que você trabalhou com ambos, independentemente do qual você se especializou.
Eu digo isso porque, como em qualquer coisa, trata-se mais de técnicas gerais do que de conhecimento de API / sintaxe além de um certo ponto. Você precisa ser capaz de fazer as coisas e conhecer o caminho a seguir, mas não precisa implementar peças enormes nas duas APIs: s. (Isso é O (n * m), que não escala ...). Conhecer um pouco as APIs e conhecer diferentes técnicas (por exemplo, O (n + m)) funciona e será útil.
Obviamente, você também receberá bônus por fazer algo "avançado" no DX, pois mostra que você tem um conhecimento mais profundo da API, mas, em qualquer caso, você precisa de técnicas avançadas para provar que sabe como as caixas devem ser conectadas (ignorando as palavras mágicas específicas que você tem a dizer para fazê-lo).
É o mesmo com qualquer API (3d ou não) ou qualquer linguagem de programação.
fonte
Eu descobri que o DirectX é mais difícil de aprender e, portanto, uma habilidade melhor. O Directx geralmente possui um melhor suporte dos fabricantes de placas, no entanto, a Microsoft não libera muitas atualizações para aproveitar esses avanços (e apenas uma subpopulação seleta de jogadores hardcore realmente usa essas placas). Quanto ao desenvolvimento de jogos, todas as principais plataformas de jogos usam seus próprios mecanismos gráficos ... xbox -> DirectX Box :) Conhecer conceitos 3D, malhas, iluminação, transformações etc. é uma habilidade que é a mesma para todos eles.
fonte
Se você conhece um, pode facilmente pegar o outro.
Se você conhece o OpenGL, pode programar facilmente para smartphones (android e iPhone), além de win / Linux / mac.
DirectX é apenas Win / Xbox. Portanto, a menos que você queira segmentar o Xbox, diria que fique com o OpenGL, pois ele pode segmentar mais plataformas.
fonte
Eu prefiro o OPENGL. Considere, por exemplo, Android, o sistema operacional móvel usa OPENGL. Existem muitos mecanismos de jogos desenvolvidos com base na plataforma OPENGL.
fonte