aplicação C ++ OpenGL como um serviço web

votos
7

Nós criamos uma aplicação OpenGL em C ++ que visualiza algumas simulações físicas. O pedido de base está contida dentro de uma DLL que é utilizada por uma interface gráfica simples. Ele atualmente é executado em um PC desktop, mas temos a idéia de transformá-lo em um serviço web.

Desde as simulações requerem hardware dedicado, a idéia é que um usuário, através de sua / seu navegador pode interagir com o aplicativo como um serviço e este serviço, em seguida, torna o resultado a uma imagem (jpg ou qualquer coisa apropriado) que pode ser exibida / atualizado no navegador.

A minha pergunta: Como posso facilmente transformar um aplicativo c ++ como descrito em um serviço web que roda em algum servidor para que eu possa abordá-lo através da web? Que tipo de tecnologias / APIs eu deveria olhar? E existem exemplos da vida real que enfrentar um problema semelhante?

Publicado 19/05/2009 em 17:14
fonte usuário
Em outras línguas...                            


8 respostas

votos
5

Isso é possível, mas uma dificuldade grande você terá está tentando usar OpenGL de um serviço web. Você precisará esta porta para fazer 100% fora da tela de renderização e trabalhar sem um contexto de janelas. Isso seria o meu primeiro passo, e nem sempre é trivial.

Além disso, é muito difícil de manter e gerenciar seus contextos OpenGL de um webservice corretamente, e a sobrecarga envolvida pode ser bastante doloroso. Dependendo do número e tipos de representações, você pode funcionar em alguns problemas lá.

Respondeu 19/05/2009 em 17:20
fonte usuário

votos
3

Eu tinha um semelhante projecto / pergunta , que, embora não fosse um serviço web, é necessário renderização OpenGL em um serviço do Windows. Eu tinha toneladas de problemas de fazê-la funcionar no Vista, embora, eventualmente, ele não funcionou no XP com OpenGL regular.

Eu finalmente tentou usar Mesa , que eu construído para funcionar como uma DLL privada para o meu serviço. Foi uma grande decisão, porque agora eu poderia realmente entrar as chamadas OpenGL e ver onde as coisas foram acontecendo de errado. Funcionou muito bem no modo de software sob o serviço, e enquanto ela não hardware foi acelerada, funcionou muito bem.

Respondeu 19/05/2009 em 17:40
fonte usuário

votos
3

Se você precisar dele para escalar bem CGI provavelmente seria uma espécie de lento e hacky.

Há alguns C ++ frameworks web lá fora, ver esta questão .

Quanto ao OpenGL vai, você provavelmente precisará usar a extensão frame buffer como disse Jay. Você poderia, então, tornar a sua imagem para uma textura, e usar uso glGetTexImage () para pegar os dados de pixel. De lá, basta salvar em que sempre formato de imagem que você quer com a biblioteca que acompanha.

Respondeu 19/05/2009 em 17:33
fonte usuário

votos
1

Que tal usar algo como Flex para criar uma 'interface de controle' web-enabled, com um backend servidor que transmite o renderização OpenGL como o vídeo? Basicamente, você está redirecionando a entrada de teclado / rato via o aplicativo Flex, e usá-lo para exibir atividade 3D 'em tempo real' usando um componente de filme padrão.

O diabo está nos detalhes, é claro ....

Respondeu 19/05/2009 em 17:41
fonte usuário

votos
1

Eu acho que você já tem acesso a algum servidor web, por exemplo, Apache ou similar. Nesse caso, você pode experimentar CppServ .

Você só precisa configurar seu servidor web para que ele possa se comunicar com CppServ. Eu, então, propor que você desenvolver um servlet (verifique a documentação no site) que por sua vez comunica com o seu dll já existente. Desde a dll sabe tudo sobre OpenGL ele não deve ser problema para criar imagens JPEG etc.

Respondeu 19/05/2009 em 17:34
fonte usuário

votos
1

Se as suas necessidades de interação dos usuários são simples, eu tinha acabado de olhar para CGI. Deve ser muito fácil de entender.

Até começar a saída do programa OpenGL, eu tomaria um olhar para a extensão framebuffer. Isso deve tornar mais fácil para você processar na memória, que poderia então ser alimentado em um compressor JPEG.

Respondeu 19/05/2009 em 17:20
fonte usuário

votos
0

Essa resposta pode parecer muito básico e elementar, você já tentou essa abordagem

  1. Enviar os dados vetoriais a partir do servidor para o cliente ou vice-versa (apenas coordena e assim por diante)

  2. Torná-lo no lado do cliente.

Isso significa que o servidor está apenas fazendo os cálculos e os números são passados ​​para lá e para cá.

Concordo que não é um método trivial de tentar vetorizar cada objeto / modelo e textura, mas é muito rápido, uma vez em vez de imagens gráficas pesados ​​atravessando, apenas os dados vector está sendo enviado através.

Respondeu 03/06/2010 em 04:06
fonte usuário

votos
0

Você pode tentar usar O3D API do Google e não fazer anysort de serviço, seria muito mais simples.

Respondeu 19/05/2009 em 19:40
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more