Pergunta

Estou pensando em escrever um jogo Java 3D que irá funcionar tanto no PC e Android. Infelizmente, parece que não há nenhuma API OpenGL comum para ambas as plataformas.

Siga as APIs diferem significativamente? Existe uma maneira que eu poderia usar o mesmo código 3D em ambas as versões? É uma boa idéia?

Foi útil?

Solução

Android suporta OpenGL ES 1.0, que se sobrepõe com OpenGL 1.3 por isso deve ser possível, mas não é tão simples a apenas substituindo os arquivos jar em tempo de execução.

É uma boa idéia para tentar reutilizar o máximo possível de sua aplicação em ambas as plataformas. Enfim, é geralmente uma boa prática para isolar o resto de vocês código de dependências externas, tais OpenGL mesmo se você não especificamente precisam de apoio OpenGL ES. Você nunca sabe o API / plataforma que você pode querer portar seu aplicativo para no futuro.

Existem 2 opções que estão disponíveis.

O primeiro é para esconder a implementação OpenGL atrás de uma interface que o resto de seus usos de aplicativos e, em seguida, fornecer implementações Jogl e Androide separadas. Dependendo de qual plataforma você está executando em você pode então optar por instanciar o implemenation correta em tempo de execução usando o padrão de fábrica.

Como OpenGL ES e OpenGL são muito semelhantes o esforço necessário para manter este não deve ser muito alto proporcionando-lhe ficar com as funções comuns.

A outra opção é tentar usar Jogl2 que tem suporte para perfis. Estes parecem fornecer exatamente o que você precisa, mas Jogl2 ainda está em beta.

A parte inferior desta página fala um pouco sobre os perfis: http://kenai.com/projects/ JOGL / pages / FAQ

Perfis permitir que aplicações Java para ser escrito de uma forma que permite a compatibilidade com várias versões OpenGL ao mesmo tempo. Desde OpenGL ES (GL para sistemas embarcados) tem sobreposição de funcionalidade com o próprio OpenGL que abriu a oportunidade de adicionar até mesmo perfis que desktop e implementações incorporados ponte.

Você pode querer ler este http://michael-bien.com/mbien/entry/ jogl_2_opengl_profiles_explained para obter mais informações sobre os perfis.

Outras dicas

O projeto está terminado. Descobriu-se as APIs diferem um pouco, mas funcionalmente há uma parte comum. Acabamos escrevendo um simples pré-processador que o código JOGL convertido para a versão ES e automatizado a conversão com Eclipse.

Há realmente um pouco de diferença entre java3d ea API OpenGL android. Primeiro java3d é uma abstração nível mais elevado em 3d. E mesmo se você fosse usar algo como JOGL haveria algumas diferenças nas API. Sua melhor aposta seria de abstrair a implementação de desenho realmente 3d na base de código, você poderia compartilhar o resto da lógica, mas depois têm código de plataforma específica para lidar com o OpenGL / 3d desenho.

Como JOGL-ES foi incorporada JOGL 2.x há vários anos, agora você pode usar JOGL tanto no ambiente de trabalho e ambientes móveis (Android).

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