Pergunta

Há mais de 5 anos eu estava brincando com DirectSound e Direct3D e achei muito interessante, embora tenha demorado muito para obter bons resultados com C++.Eu era um estudante universitário na época.Agora tenho principalmente experiência em desenvolvimento empresarial em C# e PHP, e faço isso para viver.Realmente não há chance de ganhar dinheiro com o desenvolvimento sério de jogos em nosso país.Cada dia mais e mais descubro que sinto falta de alguma coisa.Então decidi passar cerca de uma hora por dia fazendo programação para me divertir.

Então minha ideia é construir uma simulação mundial.Eu gostaria de começar com algo simples - algumas criaturas parecidas com humanos que vivem suas vidas - como o Sims 3, mas muito mais simples, apenas necessidades básicas, animações básicas, recursos gráficos mínimos - acho que não será uma cidade, mas apenas um casa grande para começar.A ideia é ter algum tipo de aplicativo de servidor que armazene os dados mundiais no banco de dados MySQL, e alguns aplicativos clientes - bots de IA sem corpo que simulam movimentos e algumas interações com o mundo e entre si.Mas não seria divertido sem o 3D.Portanto, também existem clientes 3D – posso entrar nesse mundo virtual e ver os bots de IA vivos.Quando o bot entra na área visível, ele se torna material - carrega uma malha e animações, para que eu possa ver.Quando eu saio, os bots perdem seus corpos de malha 3D novamente, mas sua vida virtual ainda continua.

Com o tempo, espero torná-lo uma espécie de sandbox programável expansível para experimentar vários algoritmos de IA e assim por diante.Mas não pretendo criar um MMORPG completo :D

Procurei muitas coisas possíveis de que precisaria (gratuitas e de código aberto) e agora tenho que fazer uma escolha:

  • OGRE3D + enet (ou RakNet).O bom e velho C++.Mas isso não vai me atrasar tanto que não vou mais me divertir?

  • CristalSpace.Formalmente não é um motor de jogo, mas muito próximo disso.C++ novamente.

  • MOgre (wrapper OGRE3D para .NET) + lidgren (biblioteca de rede que já é usada em alguns projetos de jogos).Bom - gosto de C#, é bom para programação rápida e também pode ser usado para scripts.

  • O XNA parece apenas um framework, não um motor, então realmente tenho dúvidas, devo dar uma olhada no XNA Game Studio :(

  • Panda3D - motor de jogo completo com feedback positivo.Eu realmente gosto da ideia de ter todo o conjunto de ferramentas em um pacote, ele tem boas críticas como um mecanismo amigável para iniciantes... se você conhece Python.No lado C++, o Panda3D possui documentação quase inexistente.Não tenho experiência com Python, mas ouvi dizer que é fácil de aprender.E se for divertido e desafiador, acho que me beneficiaria com a experiência em mais uma linguagem de programação.

Qual deles você sugeriria, não por causa de recursos avançados ou bom suporte de plataforma, mas principalmente por diversão, fluxo de trabalho fácil e capacidade de expansão, e para que eu possa criar e integrar todos os componentes que preciso - o servidor com o banco de dados, bots de IA e um 3D aplicação cliente?

Foi útil?

Solução

Se você gosta de python, existem ligações para Ogre.Confira python-ogro.Eu usei um pouco e parecia estável o suficiente para ser usado.No entanto, você encontrará bugs ocasionais, pois a base de usuários não é tão grande.

Tenho mais experiência com C++ Ogre simples, que gosto muito de usar.Eu não acho que isso vai te atrasar tanto.Parece que seu projeto pode atingir um nível bastante grande e você precisará de muito desempenho para fazer isso.Neste caso, C++ nunca é uma má escolha.

De qualquer forma, uma vez que o mecanismo esteja pronto, tudo se resume a scripts.E você poderia fazer isso em uma linguagem de alto nível, se quisesse.

Outras dicas

Eu usei apenas o XNA, então não posso fazer uma boa comparação com os outros.Direi que embora o XNA seja apenas um framework, TorqueX Modelo 3D é um motor.Você obtém acesso aos binários do mecanismo TorqueX 2D e 3D ao se inscrever para desenvolver para XNA (US$ 100/ano).

Não trabalhei com o motor 3D, mas usei o motor 2D.Direi que a documentação da API pode ser um pouco esparsa, mas eles têm alguns tutoriais de introdução muito bons e um fórum bastante útil e ativo para perguntas que não são respondidas pelos tutoriais.

Sua experiência com C# obviamente será muito útil.Você terá que se ater ao desenvolvimento do Windows, porque não terá acesso à pilha de rede (ou banco de dados) no Xbox 360.

Depois que estudei os tutoriais e me acostumei com o estilo do Torque, achei muito divertido trabalhar com ele.É muito fácil adicionar objetos/comportamentos.O suporte de som foi aprimorado e simplificado com alguns dos lançamentos mais recentes do framework XNA.Ele tem um bom editor para 2D, e acho que o editor 3D também é decente (ainda não tentei) para ajudá-lo a começar a criar níveis.Eu acho que está faltando no departamento de rede/banco de dados, você teria que usar o material .NET padrão ou trazer outras bibliotecas para trabalhar.

Acho que valeria a pena dar uma olhada nele e compará-lo com os outros.Acredito que você pode baixar uma versão de avaliação gratuita (30 dias), mesmo sem se inscrever no XNA, se quiser experimentar.Boa sorte!

O Panda3D parece promissor, pois tem uma maneira de modificar malhas em tempo de execução (esse recurso está faltando, apresenta erros ou é difícil de usar em muitos mecanismos 3D), que seria o que você precisa para alterações interativas de malha do lado do cliente registradas por um servidor comum .Em seu banco de dados, certifique-se de incluir um carimbo de data/hora nas modificações para que você possa executar consultas apropriadas para gerar patches para os clientes obterem informações atualizadas da malha conforme elas são alteradas.

usando o InnoDB você poderia criar tabelas como se meu SQL provavelmente estivesse desativado, mas isso dá a ideia:

create table `vertex` (
  `id` bigint(15) not null auto_increment,
  `when` timestamp default now() not null,
  `x` number not null,
  `y` number not null,
  `z` number not null,
  `cR` number default 0.0 not null,
  `cG` number default 0.0 not null,
  `cB` number default 0.0 not null,
  `cA` number default 1.0 not null,
  `u` number default 0.5 not null,
  `v` number default 0.5 not null
) primary key (id) ENGINE=InnoDB;

create table triangles (
  `p1` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p2` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `p3` bigint(15) not null references (vertex.id) on delete restrict on update cascade,
  `when` timestamp default now() not null
) primary key (p1,p2,p3) ENGINE=InnoDB;

ID é vértice id quando o registro de data e hora, permitindo que você faça os patches de atualização x, y, z é o ponto de vértice 3D CR, CG, CB, CA é rgba vértice color u, v é coordenada de textura de vértice p1, p2, p3 consulte os vértexes Na tabela de vértices para formar triângulos, conforme indicado por essas referências fundamentais ...InnoDB nos permite evitar vértices indefinidos (ou seja:questões relacionadas à consistência), portanto, também podemos usá-lo.Se for aceitável remover todos os triângulos com um vértice excluído na sua situação, altere 'restringir' para 'cascata' (restringir torna um erro excluir um vértice com triângulos que o utilizam)

Quanto ao algoritmo de malha de bot, basicamente você está implementando uma seleção de LOD para bots que não estão à vista.Muitos motores já são capazes de fazer isso por você.Por exemplo, todas as malhas de skin/animação do bot podem ser transformadas em filhos do objeto externo do bot no Panda3D e se o objeto externo do bot for retirado do escopo visível, nenhum dos filhos será referenciado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top