Sobre a GameSpaceLib
GameSpaceLib é uma biblioteca desenvolvida em C++ para o controle de dispositivos de
entrada e saída: vídeo (2D), áudio e mouse, teclado e joysticks. A GameSpaceLib é
gratuita, portável para outros sistemas operacionais e possui o
código-fonte aberto.
O que a GameSpaceLib
pode fazer? Segue uma pequena lista de algumas das funcionalidades da
GameSpaceLib que podem auxiliar no desenvolvimento de seu
video game ou
aplicação multimídia interativa:
Janela e
aplicação Permite
criar aplicações no modo janela e em modo tela-cheia com
possibilidade para alterar a própria resolução em tempo
real.
Sprites Gira,
estica, reposiciona, inverte e recorta suas sprites e as
desenha aplicando qualquer tipo de transparência. Oferece suporte a render-targets.
Lê os formatos JPEG, BMP, TGA e PNG com suporte à
camadas de transparência.
Saída de
dados Desenha
textos com anti-aliasing do jeito que você quiser: coloridos,
transparentes, de diversos tamanhos e fontes true type.
Áudio Carrega
efeitos sonoros ou músicas nos formatos MP3, OGG, WAV, FLAC,
etc., reproduz em formato stereo ou mono e permite que seu
volume e freqüência sejam alterados em tempo real.
Vídeos Carrega
e toca arquivos de vídeo dos principais formatos (JPEG,
AVI, WMV, etc.) possibilitando a criação de apresentações em
vídeo e cutscenes assim como players interativos dentro do
programa ou jogo.
Entrada de
dados Permite
o controle de entrada de dados com teclado, mouse e
joysticks de maneira fácil e intuitiva, sem a necessidade de
criar funções para recepção de mensagens manualmente.
Pixel
shaders Permite
aplicar shaders aos elementos gráficos utilizando a
tecnologia e linguagem de alto nível Cg, da NVIDIA,
permitindo alcançar resultados impressionantes nos jogos 2D.
Manual
completo Acompanha
a documentação de todos os objetos, métodos e funções
relevantes com explicações detalhadas e índice de
funcionalidades, exemplos e tutoriais.
Quais são as
vantagens da GameSpaceLib?
Dentre outras bibliotecas multimídia como SDL e Allegro, a vantagem da
GameSpaceLib é que ela possui objetos muito mais fáceis e intuitivos
para programação orientada a objetos. A GameSpaceLib foi programada para
acessar diretamente as funções da API, o que a torna veloz, pois utiliza
todos os recursos da placa de vídeo e de forma direta, sem passar por
outros motores ou frameworks para fazer a mediação.
O que é preciso para
programar jogos com a GameSpaceLib?
Para programar com a GameSpaceLib é necessário um compilador de C++
compatível com alguma versão do framework (Microsoft
Visual Studio ou
Dev-C++)
e conhecimento em lógica da programação e em linguagem C++. Devido ao
fato de que o GameSpace fornece apenas funções relativas as
funcionalidades básicas de entrada e saída, ainda é importante que o
desenvolvedor possua conhecimento em lógica da programação e programação
de jogos.
Quanto custa a GameSpaceLib?
Nada. A GameSpaceLib é totalmente gratuita e pode ser utilizada,
alterada e redistribuída livremente de acordo com a Licença Pública
Menos Geral (LGPL) da GNU e de acordo com os parâmetros da iniciativa
Open Source de software livre.
GameSpaceLib SDK
v1.5.8
(XP/Vista) - (8,75 MB)
Inclui: Dlls, Libs, headers compatíveis com Visual C++ e
Dev-C++, código-fonte completo, documentação completa,
exemplos, DevPak e DLL's necessárias para executar os
shaders da Cg.
GameSpaceGL (projeto em andamento) O link acima irá direcionar à página com informações
sobre o projeto cross-platform da GameSpaceLib.
18/4/2010 - GameSpaceGL reativado Está sendo desenvolvida uma versão cross-platform baseada em OpenGL e SDL da GameSpaceLib. Os principais recursos, como o suporte a shaders, estão inclusos. O código está sendo constantemente atualizado e enviado para o repositório do projeto hospedado pelo Google Code:
code.google.com/p/gamespacelib
24/3/2010 - GameSpaceLib 1.5.8 lançada Está liberada a versão 1.5.8 da GameSpaceLib. Esta nova versão traz poucas, porém importantes, alterações:
-Todos os métodos de nome Release foram mudados para Destroy evitando assim confusão quanto a verdadeira funcionalidade deles (que não possuem contador de referência).
-Novo método GS_SHADER::SetConstantArrayF para enviar arrays de floats como parâmetros uniformes.
-Novo método GS_SHADER::SetConstant1I para enviar parâmetros uniformes inteiros.
Com a adição dos novos métodos ao objeto GS_SHADER está mais fácil criar shaders com efeitos como o bloom.
2/3/2010 - GameSpaceLib 1.5.7 Liberada a versão 1.5.7 da GameSpaceLib. Esta nova versão traz como novidade o suporte a maximização de janela e otimizações nos objetos GS_VECTOR-2/3/4/2i.
8/2/2010 - GameSpaceLib 1.5.6 e Ethanon Engine Foi disponibilizada a versão 1.5.6 da GameSpaceLib. Apesar de poucas, as novidades dessa versão são muito importantes para a estabilidade e performance da biblioteca.
Confira a lista completa:
-O sistema de busca por parâmetros uniformes do shader foi otimizado. Agora utiliza boost::unordered_map para busca. Isso irá melhorar a performance das aplicações feitas com a GSlib.
-Os métodos GAMESPACE_VIDEO_HANDLER::ResetVideoMode agora também permitem a troca entre os modos fullscreen e janela em tempo de execução sem comprometer o andamento do programa.
-O método GAMESPACE_VIDEO_HANDLER::StartApplication agora está mais seguro contra problemas de incompatibilidade de hardware.
-Arrumado bug que fazia com que aplicações em tela cheia ficassem com 16 bits de cor mesmo se o usuário quisesse 32.
-Adicionadas as macros GSK_NUMPAD0 - GSK_NUMPAD9 para captura do teclado numérico.
-A organização do código-fonte da biblioteca foi levemente reestruturada.
-O nome dos métodos GAMESPACE_VIDEO_HANDLER::SetWindowPos e ::GetWindowPos foram mudados para ::SetWindowPosition e ::GetWindowPosition por questões de compatibilidade com a Win32.
Outra novidade é que já coloquei no ar o site e os arquivos da Ethanon Engine para download. Tem alguns meses que estou divulgando screenshots, videos e comentários sobre esse engine 2D que estou desenvolvendo, e agora finalmente a primeira versão beta está disponível para download. O endereço do site é: www.asantee.net/ethanon/.
20/1/2010 - Liberada a GameSpaceLib 1.5.5 Foi disponibilizada para download a versão 1.5.5 da GameSpaceLib. Entre as novidades está um método que salva o conteúdo de sprites e render-targets em arquivo BMP, PNG, JPEG entre outros e um novo tipo de alpha blending (GSAM_MODULATE), ideal para alguns efeitos como luz e sombra, além de diversas correções e otimizações importantes.
Com a possibilidade de salvar render-targets, agora é possível compor imagens em tempo real com total aceleração de hardware (como lightmaps e decalques) e salvá-las para uso posterior.
Confira a lista completa de novidades:
-Os objetos GS_VECTOR passaram por diversas alterações, adições correções.
-Algoritmo para cálculo de FPS aprimorado.
-Os métogos Get simples foram transformados em constantes para permitir a passagem de ponteiros constantes de objetos, dando mais segurança e confiabilidade ao código
-Arrumado bug que causava crash quando o som não era carregado com sucesso.
-Corrigido um problema que ocorria quando se usava os eixos digitais do joystick.
-Funções de operação com matrizes em gsmath.h foram otimizadas.
-Adicionados métodos GAMESPACE_VIDEO_HANDLER::RoundUpPosition e ::IsRoundingUpPosition que tratam do arredondamento na posição dos sprites (útil para evitar o desalinhamento pixel-texel).
-Adicionado o método GAMESPACE_INPUT_HANDLER::GetLastCharInput que retorna o valor ASCII do último caractere digitado.
-Adicionados os métodos GAMESPACE_VIDEO_HANDLER::SetRectMode e ::GetRectMode que permitem alterar a quantidade de triângulos dos sprites, permitindo efeitos diferentes com vertex shaders.
-Adicionado o método GS_SPRITE::SaveBitmap que salva texturas em arquivo.
-Adicionado um novo tipo de alpha: GSAM_MODULATE.
-Adicionado o método GAMESPACE_INPUT_HANDLER::JoyButtonDown que retorna true se determinado botão do joystick está sendo pressionado. Uma alternativa ao método ::JoyButtonState.
-Adicionado o método GAMESPACE_VIDEO_HANDLER::GetWindowTitle.
-Por motivo de segurança e compatibilidade, muitos parâmetros e variáveis internas que eram do tipo int foram alteradas para unsigned int.
-A biblioteca agora avisa o usuário (através do console output) sobre perdas e recuperação do dispositivo IDirect3DDevice9.
5/10/2009 - Saiu a GameSpaceLib 1.5.4 Já está disponível para download aqui no site a versão 1.5.4 da GSlib. Entre as novidades da versão está o suporte à z-test, que pode ser usado para acelerar (e muito) o ordenamento de sprites, fazendo com que não seja obrigatório desenhar os sprites que ficam "por trás" primeiro, tornando a ordem de desenho livre e poupando a CPU de eventuais rotinas de sorting (ordenamento). O screenshot a seguir mostra um conjunto de sprites que foram desenhados em ordem aleatória, mas a sequencia de profundidade foi respeitada (pilares mais "próximos" escondem os de trás).
Outra novidade é o suporte a multitexturas, que permite combinar cores de várias camadas de textura sem precisar utilizar pixel shaders. Veja a lista completa das novidades da versão nova da GameSpaceLib no arquivo leia-me.txt incluso no SDK.
Esses recursos novos estão sendo utilizado em um engine que venho desenvolvendo já a alguns meses, mas que só agora disponibilizei algumas imagens da versão beta.
Este engine é totalmente baseado em sprites 2D e escrito com a GameSpaceLib. Ele usa pixel shaders para fazer a iluminação baseada em normalmaps. O engine suporta qualquer tipo de construção de mapas (isomérico, orthogonal, etc.) pois é baseado em entidades arbitrárias, ao invés de tiles fixos.
A primeira coisa que você verá no vídeo é o editor de entidades, onde o usuário pode configurar o tipo de iluminação, partículas e outros efeitos e propriedades da entidade. A segunda coisa que o vídeo mostra é o editor de mapas (em versão beta ainda).
Uma das características mais interessantes é a capacidade de pré-renderizar os lightmaps de entidades e luzes estáticas, então somente luzes e entidades dinâmicas irão ser computadas.
9/8/2009 - GameSpaceLib 1.5.3 disponibilizada para download Está pronta a versão 1.5.3 da GSlib. Essa versão traz muitas otimizações e algumas correções.
As principais novidades incluem a possibilidade de carregar recursos (figuras ou arquivos de áudio) direto de buffers na memória virtual. Útil para carregar os arquivos do jogo de pacotes compactados que são descompactados virtualmente.
Outra novidade é a inclusão do suporte a câmera 2D, poupando o programador de terque implementar seu próprio sistema de "scroll".
Lista completa: -Adicionado o método GAMESPACE_VIDEO_HANDLER::GetProgramPath que informa o caminho para o diretório onde se encontra o próprio arquivo *.exe.
-Adicionados os métodos GAMESPACE_VIDEO_HANDLER::SetCameraPos, ::GetCameraPos e ::MoveCamera que podem ser usados para mover a câmera da cena. Isso implicou em mudanças no vertex shader default (interno, contido no arquivo gsCgString.h).
-Os métodos GS_SPRITE::LoadSprite e GS_AUDIO_SAMPLE::LoadSample foram sobrecarregados para suportar o carregamento de arquivos de mídia localidados em buffers na memória virtual.
-Alguns ajustes na forma de saída das mensagens de erro e outros avisos.
-Padronizada a dimensão das strings C utilizadas internamente.
-Corrigido bug de cálculo na forma de recorte das fontes desenhadas a partir de sprites.
-Alguns métodos e funções do cabeçalho gsmath.h foram alteradas para uma melhor performance.
-Foi escrito um shader especial para o desenho das fontes geradas a partir de sprites. Isso tornou o desenho desse tipo de texto muito mais veloz.
-O shader padrão da GameSpaceLib ganhou um novo parâmetro uniforme: o "uniform float2 cameraPos", que receberá a posição da câmera durante o desenho de sprites.
-Corrigido o problema do método GAMESPACE_INPUT_HANDLER::GetJoystickUV que exibia alertas mesmo se estes estivessem desativados.
3/7/2009 - Novo software open-source: ParticleFX Foi disponibilizada para download mais uma ferramenta desenvolvida com a GameSpaceLib: a ParticleFX fornece uma fácil interface para edição de sistemas de partículas 2D dinâmicas. Os sistemas de partículas são salvos num arquivo PAR e o pacote do software inclui uma classe com código aberto escrita especialmente para carregar, processar e desenhar essas partículas. O sistema de renderização é voltado aos métodos de desenho 2D avançados que fazem uso da placa aceleradora 3D para rotação e transparência. O programa também permite ao programador aplicar efeitos de shader com a linguagem Cg (através da GameSpaceLib).
Você pode inserir os efeitos de partícula em seu jogo facilmente com o uso da classe ETH_PARTICLE_MANAGER, que acompanha o pacote e é instalada automaticamente. Veja o exemplo aqui. Apesar de ser facilmente adaptável a qualquer engine, biblioteca ou framework de renderização 2D, esta ferramenta foi escrita para trabalhar em conjunto com um engine open-source em que estou trabalhando e provavelmente já terá uma versão estável liberada para download ainda na primeira metade deste semestre.
Para saber mais e fazer o download da versão 1.0 completa do programa, que acompanha o código-fonte completo disponibilizado via licença LGPL, visite a página oficial: www.asantee.net/gamespace/ethanon.
29/6/2009 - Imagine&Draw: software educativo Imagine&Draw é um pequeno programa desenvolvido com a GameSpaceLib e voltado ao público infantil, dos 3 aos 7 anos de idade. Esta ferramenta permite misturar cores e formas para a composição de cenas que podem ser salvas no formato JPEG.
Desenvolvido pela Tydres Entertainment, este programa é gratuito e pode ser utilizado livremente. Ideal para estimular a imaginação dos pequenos usuários de computador. Download.
SpacePong 1.7.1
SpacePong é um remake
bem simples feito com GameSpaceLib do clássico pong, para 1 ou 2 jogadores, todo
feito em GameSpaceLib para áudio, vídeo e input. A proposta
do jogo é oferecer algo simples que utilize vários dos
recursos da GS para ajudar na divulgação da biblioteca. O
jogo inclui o código-fonte que é automaticamente copiado
para o diretório em que é instalado.
Download e mais informações.
Light
Castle Demo
Uma pequena demonstração feita com GameSpaceLib que ilustra
o uso de pixel shaders em Cg para criar iluminação rápida,
bonita e dinâmica em uma cena totalmente 2D. Inclui o código
fonte dos shaders.
Este é apenas um demo técnico, não se trata de um jogo, mas
serve de laboratório para recursos que podem ser utilizados
em jogos reais.
É necessário ter placa de vídeo com suporte ao shader model
2 do DirectX 9 para rodar com configuração máxima. Download.
Imagine&Draw
Este pequeno programa desenvolvido com a GameSpaceLib é
voltado ao público infantil, dos 3 aos 7 anos de idade. Esta
ferramenta permite misturar cores e formas para a composição
de cenas que podem ser salvas no formato JPEG.
Desenvolvido pela Tydres Entertainment, este programa é
gratuito e pode ser utilizado livremente. Ideal para
estimular a imaginação dos pequenos usuários de computador.
Download.
Sprites:
personagens 2D com C++: este tutorial explica, passo-a-passo, como criar personagens 2D e movimentá-los no mapa
utilizando as setas de teclado com GameSpaceLib e C++.
Efeito
de sombra: este tutorial, escrito por Cristiano Douglas, irá
ensinar como simular uma sombra como a que é utilizada no game Tanks
Of War.
Pixel
shaders: esse tutorial-exemplo mostra como utilizar
normal maps e pixel shaders para criar um belo efeito de
iluminação por pixel que realça o efeito de profundidade nos
sprites.
Reinventando o estilo 2D:
apresentação de slides+vídeo feita para ser exibida na
Campus Party que fala sobre o uso do GPU moderno em jogos no
estilo 2D e propõe um novo olhar a esse tipo de jogo.