ti-enxame.com

Qual é a melhor alternativa para C ++ para programação gráfica em tempo real?

C++ apenas suga muito do meu tempo, fazendo-me micro-gerenciamento minha própria memória, fazendo-me digitar muito (Olá std::vector<Thingy>::const_iterator it = lotsOfThingys.begin()), e me aborrecendo com longos tempos de compilação. Qual é a melhor alternativa para programar gráficos em tempo real sério? A coleta de lixo é uma obrigação (como é a capacidade de evitar seu uso quando necessário), e a velocidade deve ser competitiva com C++. Uma história razoável para acessar C libs é também uma obrigação.

(Divulgação completa: Eu tenho minha própria resposta a isso, mas estou interessado em ver o que os outros descobriram ser boas alternativas para o C++ para o trabalho gráfico em tempo real.)

edit : obrigado a todos pelas respostas pensativas. Dado que não há realmente nenhuma resposta "certa" a esta pergunta, não vou selecionar qualquer resposta específica. Além disso, apenas escolheria a linguagem que eu goste como uma alternativa C++, o que realmente não seria justo.

33
Baxissimo

Eu não concordo com sua premissa. Quando usado cuidadosamente e corretamente, o C++ é uma grande linguagem, especialmente para um domínio como gráficos em tempo real, onde a velocidade é da essência.

O gerenciamento de memória se torna fácil se você projetar bem o seu sistema e usar contêineres STL e ponteiros inteligentes.

std::vector::const_iterator it = lotsOfThingys.begin()) Tornar-se-á muito mais curta se você usar

using namespace std;
typedef vector::const_iterator ThingyConstIter;

E você pode encurtar os tempos de compilação significativamente quebrando seus sistemas em módulos razoavelmente autocontados, usando cabeçalhos pré-compilados, ou usando o idioma PIMPL.

15
Dima

Não vamos esquecer de mencionar o novo uso de 'auto':

auto it = lotsOfThingys.begin(); // Let the compiler figure it out.
auto it2 = lotsOfFoos.begin();
if (it==it2) // It's still strongly typed; a Thingy iter is not a Foo iter.
13
MSalters

Alguma variação de Lisp que compila o código da máquina pode ser quase tão rápida quanto C++ para esse tipo de programação. O Dog de Dog Team criou uma versão do Lisp chamado conjunto orientada para o jogo Lisp , que eles usaram para criar vários títulos AAA, incluindo a série JAK e DAXTER. Os dois principais impedimentos para uma abordagem Lisp na indústria do jogo seria a natureza entrincheirada do desenvolvimento C/C++ (ambas as ferramentas e ativos humanos são fortemente investidas em C/C++), bem como a dificuldade de encontrar engenheiros talentosos que são estrelas em tanto o domínio de programação do jogo quanto a linguagem lisp.

Muitas equipes de programação no setor estão mudando para uma abordagem híbrida em que o código em tempo real, especialmente gráficos e código de física, é escrito em C ou C++, mas a lógica de jogo é feita em uma linguagem de script de nível superior, que é acessível e editável por programadores e não-programadores. Lua e Python são populares para scripts de nível superior.

12
Nathan

Às vezes, olhando para fora do caminho batido, você pode encontrar uma verdadeira jóia. Você pode querer considerar purebasic (não deixe o nome enganar você). Aqui estão alguns detalhes:

Características purebasic.

  • Código de máquina (montagem) executáveis ​​(FASM) [.____]
    • Suporte de montagem em linha
    • Nenhum tempo de execução necessário (sem dlls necessários, etc.) 1 arquivo executável
    • Executáveis ​​minúsculos (tão pequenos ou menores/tão rápidos ou mais rápidos que C++ com o tempo de execução)
    • Você pode escrever DLLs
    • Suporte multi-thread
    • Suporte completo da API do OS
  • Suporte multi-plataforma
    • Windows 95-2003.
    • Linux.
    • Mac OS X
    • Amiga
  • 2D e desenvolvimento de jogos 3D [.____]
    • DirectX.
    • OGRO
  • Licenciamento generoso [.____]
    • Barato (79 euros ou cerca de US $ 112)
    • Licença de vida (todas as futuras atualizações e versões incluídas)
    • Um preço para todas as plataformas
  • Suporte da biblioteca externa [.____]
    • DLLs de terceiros
    • Bibliotecas do usuário.
  • Suporte online
    • Equipe de desenvolvimento responsiva liderada pelo criador
    • Fórum on-line [.____]
      • Um lugar para respostas (não precisa ir por toda a rede)
      • Quantidade enorme de código de amostra (tente o código enquanto estiver em IE com Ietool)
      • Respostas rápidas a perguntas
  • Aprendizagem de bônus (alternativa ao aprendizado C++) [.____]
    • Api.
    • Estruturas
    • Interfaces.
    • Ponteiros

Visite o fórum on-line para obter uma ideia melhor de purebasic ( http://www.purebasic.fr/english/index.php ) ou o site principal: www.purebasic.com .

6
DevilDog

Não há alternativas verdadeiras para grandes títulos de AAA, especialmente nos consoles. Para pequenos títulos c # deve fazer.

3
yrp

Eu voto C++ 0x. O suporte parcial já está disponível no GCC-4.3 + usando o sinalizador -stD = C++ 0x.

2
crelbor

Muitos motores de jogos podem caber sua necessidade, suponho. Por exemplo, usando SDL ou Cairo, se a portabilidade for necessária. Muitas linguagens de script (chegando em geral com fácil sintaxe e coleta de lixo) têm vinculativo a essas lona.
[.____] Flash pode ser outra alternativa.

Vou apenas apontar processamento , que é uma linguagem de programação de código aberto e ambiente para pessoas que desejam programar imagens, animação e interações.

Na verdade, é um invólucro fino em torno de Java, torná-lo parecido com uma linguagem de script: tem um (primitivo) IDE quando você pode digitar algumas linhas de código e hit run sem Salve o arquivo. Na verdade, ele envolve o código em torno de uma classe e adiciona uma chamada principal (), compila e executá-lo em uma janela.

Muitas pessoas usam para exposições em tempo real (VJ e similares). Tem o poder e limitações do Java, mas adiciona fora da caixa um número de agradáveis ​​wrrappers (bibliotecas) para simplificar o acesso a Java2D, OpenGL, SVG, etc.

De alguma forma, tornou-se um modelo de linguagem gráfica simples: existem várias aplicações tentando imitar o processamento em outros idiomas, como Ruby, Scala ou Python. Um dos mais impressionantes é uma implementação de JavaScript, Usando o componente canvas implementado no Firefox, Safari, Opera, etc.

2
PhiLho

Como James (Hopkin), para mim, a abordagem híbrida é a melhor solução. Python e c ++ é uma boa escolha, mas outro estilo como C #/C++ funciona. Tudo depende do seu contexto gráfico. Para o jogo, XNA é uma boa plataforma (limitada a Win32), neste caso C #/C++ é a melhor solução. Para visualização científica, o Python/C++ é aceito (como as ligações do VTK em Python). Para o jogo móvel Java/C++ pode funcionar ...

2
Johan Moreau

Java e Lwjgl (Wrapper Opengl) funcionaram bem para mim. Se você está procurando mais de uma biblioteca de tipos de gráfico de cena como ORGE dar uma olhada no JonkeyEngine, que usamos para criar um aplicativo do tipo Terra do Google (consulte www.skapaworld.com). Se você é sensato com a criação de objetos, a coleta de lixo é um problema não.

1
Rik

Dê uma olhada para o objeto Delphi/Pascal e alguns exemplos: http://www.delphigamer.com ou http://glscene.cjb.net/

0
philnext

Se o seu alvo é um PC, acho que você pode tentar c # ou incorporar Lua no aplicativo C++ e execute scripts para coisas 'de nível alto'. No entanto, se o seu alvo for um console, você deve gerenciar sua própria memória!

0
R Caloca

A coleta de lixo é uma obrigação (como é a capacidade de evitar seu uso quando necessário)

Você não pode desativar um coletor de lixo temporariamente. Você precisaria de um coletor de lixo determinístico então. Mas essa besta vêm com um sucesso de desempenho também. Eu acho que Bea Jrockit é uma fera e então você deve ficar com Java.

Apenas para comentar sobre o seu exemplo; Typedef é seu amigo ...

typedef std::vector<Thingy> Thingys;
Thingys::const_iterator it = lotsOfThingys.begin()
0
Markowitch

Objective-C parece uma boa correspondência para suas necessidades (a versão mais recente com GC opcional), embora seja demasiado dinâmica e pequena, semelhante ao meu gosto.

0
Nemanja Trifunovic

XNA é sua melhor aposta que eu penso. Sendo apoiado pelo .NET Framework Você pode criar uma plataforma Windows ou Xbox 360 simplesmente alterando uma configuração no jogo Studio. Melhor ainda, todas as ferramentas são gratuitas!

Se você decidir ir com XNA, você pode facilmente começar a usar seu guia QuickStart Guia XNA Quickstart

Tem sido uma experiência recompensadora e divertida para mim até agora, e uma boa pausa do gerenciamento de memória de C++.

0
Game_Overture