Páginas

terça-feira, 15 de setembro de 2020

Programando o Dreamcast - Parte 2

 

         

    Olá! 

    Vou tentar sumarizar aqui os resultados das minhas experiências programando o DC. 

   Não encontrei muita dificuldade ao utilizar a versão mais antiga do OpenGL (mais especificamente a biblioteca KGL) e criar cenários com múltiplas texturas.   Como é possível ver no vídeo abaixo.




    Mas talvez o ponto alto foi conseguir criar terrenos utilizando o ruído perlin. Veja o resultado abaixo (o vídeo ficou um pouco escuro...).

     




 Veja no vídeo que também há um skybox, um céu estrelado.

    Ainda não rodei diretamente no console. Mas no emulador (NullDC 1.0.4) não ficou tão fluido quanto eu gostaria. Alguns FPS a mais ajudariam, sem dúvidas. 

   Otimizar esta cena é um caso a ser estudado, mas quem sabe no futuro. Concluo dizendo que foi bem interessante e sem dúvidas rendeu um bom aprendizado, mas por hora farei uma pausa de brincar de desenvolver no Dreamcast.
  
  Deixo abaixo o link para os repositórios contendo os códigos-fonte destas cenas vistas nos videos. Lá também é possível encontrar as ISOs (.cdi), basta gravá-las (apropriadamente) em um CD e rodar diretamente no Dreamcast.  

   
  
   Até a próxima!



 

segunda-feira, 21 de outubro de 2019

Desenvolvendo para o Dreamcast



Novas ferramentas facilitam a vida de quem pretende se aventurar por esta senda



A dificuldade maior não é programar o Dreamcast, algo relativamente simples se você está familiarizado com a linguagem C e com OpenGL. A complicação maior é gerar o ambiente de desenvolvimento, com todas as "toolchains" do "devkit" KallistOS (ou KOS). Faço este post, com o intuito de compartilhar a solução mais simples para esse problema.

Há pouco tempo atrás a única saída era instalar o MinGW e depois ir baixando os pacotes necessários via comandos no prompt. Além de trabalhoso, havia uma boa chance de brotarem erros inesperados durante a instalação. Mas graças ao excelente trabalho de um programador francês , agora temos o DreamSDK, que veio pra ajudar nesse sentido e mostrou-se, de longe, a melhor opção.


Direto ao ponto. Aqui está onde você tem que ir:


            https://www.dreamsdk.org



Dicas:


Antes de instalar o DreamSDK siga as orientações do site e instale os outros programas necessários: Python 2.7 (32-bit), Git e o Subversion Client.


Depois execute os testes recomendados que estão em "General Information: Requirements".


Se encontrou algum problema poste aqui nos comentários pra tentarmos encontrar a solução.


Se der tudo certo: voilà! Está tudo pronto pra você se divertir produzindo novos jogos ou programas pra este excelente console.


                                                       Considerações finais


Há muita informação importante na seção de ajuda do site, por isso não deixe de dar uma boa olhada lá, segue o link:



https://www.dreamsdk.org/help/



Ali você encontrará todas as orientações de como rodar os programas, diretamente no console ou em um emulador (NullDC por exemplo).


Pretendo fazer mais alguns posts sobre desenvolvimento pra Dreamcast. Desta vez abordarei mais a parte de software, compartilhando por aqui alguns testes e experiências que ando fazendo.


Até a próxima.


Introdução ao Unity



    

        No post anterior falei sobre o joguinho que fiz utilizando uma engine (ou motor de jogo). Achei legal aproveitar isso pra fazer agora uma breve introdução à engine utilizada: o Unity.  

  Se você nunca usou, ou seja, não sabe nada a respeito do Unity, este post talvez possa esclarecer um pouco sobre o seu funcionamento. 


             Unity vs OpenGL, DirectX e etc...


     Pra quem já tentou fazer jogos no método "raiz", isto é, utilizando somente código, algumas APIs gráficas (OpenGL ou DirectX) e outras de controle (SDL por exemplo), percebe que o Unity é praticamente um sonho transformado em realidade.  Digo isso porque esta ferramenta facilita muito a vida do desenvolvedor: é tão intuitiva que você faz jogos quase "sem querer". Aliás, conforme mencionei no post anterior, foi assim que surgiu meu jogo!

        Só para ilustrar como o Unity funciona vou tentar passar aqui, mais ou menos (de maneira ampla, sem detalhes), como funciona a engine:

   1)  Você cria ou importa algum objeto (GameObject), que pode ser um personagem (sprite), modelo 3D ou parte do cenário (árvores, plantas e etc.) e posiciona ele (arrasta com o mouse) na tela do jogo. 

    2) Este objeto é algo inanimado, até você adicionar um Componente e/ou um script (código) a ele. O código literalmente dá vida ao objeto. Ao receber o script o objeto pode ter todo o seu comportamento programado e acessado por outros scripts e objetos. Tornando assim possível que "qualquer coisa" (objeto ou evento) se comunique ou interaja com todo o resto. Aliás, um objeto pode ter diversos scripts e componentes anexados a ele.

 3) Obviamente que toda a parte lógica do jogo: condicionais, movimentos, controles, placar, detecção de colisões e etc., é feita através dos scripts. A física (alguns movimentos, gravidade e resolução de colisões) 'podem' ser automáticos, isto é, não necessitam de programação.

 4) É possível permitir que algumas variáveis sejam manipuladas diretamente (de maneira visual) através do menu lateral (chamado de Inspector, veja na imagem abaixo). Este recurso é excelente para fazer uma sintonia fina dos valores.

  
O "Inspector" é onde podemos ver e controlar os componentes e os scripts anexados aos objetos (GameObjects). Aqui vemos alguns componentes, como por exemplo o componente "Transform", que nos mostra e coordena a posição, rotação e a escala do objeto a que está anexado. Podemos adicionar (clicando em "Add Component") um script que controla continuamente cada um desses parâmetros. Este script poderá ser editado no editor de scripts do Unity, o MonoDevelop. 



 5) A engine também conta com um editor de cenários também bastante intuitivo. 

    Mesmo que você não tenha pretensões de se tornar um desenvolvedor de jogos, recomendo que instale e brinque um pouco com o Unity. Posso dizer que não vai demorar muito pra alguns resultados interessantes começarem a surgir e a criatividade tomar as rédeas da brincadeira!
        
        
     Em breve haverão mais posts sobre dicas e macetes no Unity. Até lá!    





terça-feira, 4 de dezembro de 2018

Meu 1° jogo feito no Unity


   

Vou mostrar aqui meu primeiro jogo feito no Unity. É bem simples e à primeira vista já pode-se notar que há muita coisa que pode ser melhorada. Mas me dou por satisfeito visto que o objetivo era apenas conhecer um pouco melhor este excelente engine de games .

                  
Capa do jogo



    O joguinho (que pode ser jogado online aqui) nasceu espontaneamente, enquanto brincava de colidir objetos em queda livre. Após ficar por um tempo tentando acertar um cubo numa pedra, me dei conta que o jogo estava praticamente pronto, na verdade só faltava o placar. Depois até acabei bolando uma estorinha meio tosca para ver se alguém se empenha a chegar ao fim do jogo. 

    Conforme mencionei anteriormente pode ser jogado online no browser e não é necessário instalar nenhum plugin, mas rolando a página para baixo pode-se encontrar uma versão para download (no momento apenas para Windows 32/64).

Segue o link :

https://rodrivas78.itch.io/hit-the-rock


  Pra zerar basta controlar a bola para que o cubo acerte na pedra por 6 vezes. A cada dois acertos a pedra muda de lugar.

  Parece difícil mas não é, basta treinar um pouquinho. Se conseguir terminar poste aqui nos comentários a pontuação (total score) atingida.

   As músicas também são de minha autoria. 

  Espero que gostem!

Segue vídeo do gamplay:





Até a próxima!


       

terça-feira, 28 de agosto de 2018

Gerador de Labirintos - Maze Generator





   Aqui vai uma técnica que elaborei para criar highmaps de labirintos e de outros cenários complexos ou mesmo surrelistas.

  Consiste de uma aplicação (em C++) que gera uma imagem semi-caótica em preto e branco (link para download no fim do post).  


   Instruções:

   Ao executar o programa é gerada uma imagem que parece um "ruído branco".  Veja abaixo alguns exemplos.
  




                                      

 Escrevi sobre as imagens as fórmulas (em vermelho) para ilustrar algumas das possíveis variações.
    




     Tire um "Print" da tela e abra a imagem no seu editor de imagens preferido. Amplie entre 800 a 1000 vezes. Escolha uma região da imagem (que você acha que tem um padrão interessante), corte e salve como arquivo RAW (PRAW / 8BIM / Sem ordem intercalada) e abra-o como um 'highmap' no seu game engine (Unity, Unreal Engine etc.). 

        Como exemplo selecionei esta região:

 
   Alterando as configurações¹ do programa você pode obter resultados mais densos ou complexos.

     Após abrir o arquivo e aplicá-lo como "highmap" em um terreno, adicionando também uma textura, o resultado foi esse:

  






   
   Para resultados de aspecto mais naturais/orgânicos ou mesmo surrealistas, aplique filtros (artísticos) no Photoshop:










As ruínas de Atlântida??











   Não esqueça de redimensionar a imagem para o mesmo tamanho do terreno antes de criar o arquivo RAW.

   

    Segue link do executável e código-fonte:  

   https://github.com/rodrivas78/Maze-Generator

      

 1. Para obter resultados variados (outros padrões) é necessário que você modifique o código-fonte, substituindo as fórmulas alternativas disponibilizadas no código.  
  
   
   
         


quarta-feira, 8 de agosto de 2018

Matemáticos, exploradores de mundos

    

       Este post pode ser visto como uma continuação do post anterior


    Uma das características interessantes ao ponderarmos no "mundo" da matemática como uma realidade à parte, é o fato deste ponto de vista encaixar-se com precisão na sensação de "explorador" (como estado de espírito), presente no ânimo dos matemáticos ao sondar o vasto campo abarcado por esta disciplina.
     Talvez o motivo de eu me identificar com este conceito é devido ao fato de, ao estudar matemática, muitas vezes, me sinto realmente como um viajante ou turista, tentando conhecer e vislumbrar o máximo possível de novas "paisagens". 

            Conforme a tradição deste blog, faz-se relevante citar novamente o notável matemático, autor e professor, Roger Penrose (o grifo é meu):

"A própria matemática, na verdade, parece ter uma robustez que vai muito além do que qualquer matemático individual é capaz de perceber. Aqueles que trabalham neste assunto, estejam eles ativamente engajados em pesquisas matemáticas ou apenas usando resultados que foram obtidos por outros, geralmente sentem que são meramente exploradores em um mundo que está muito além de si mesmos - um mundo que possui uma objetividade que transcende mera opinião, seja essa opinião própria ou a suposição de outros, não importa o quão especializados esses outros possam ser. " ¹  ("The Road to Reality", pg. 13).

    A matemática, assim como a ciência ou qualquer outra área do conhecimento, não caminha aos saltos. Ao estudarmos um pouco a história da ciência vemos que cada descoberta teve por base conquistas anteriores.  Para ilustrar um pouco este ponto de vista, voltemos a falar um pouco sobre o conjunto de Mandelbrot. Conforme afirmamos ao final do último post, os objetos existem de maneira potencial e atemporal no que chamamos de "mundo da matemática". Não foi diferente com este fractal. Tal "estrutura" sempre existiu, ou melhor, sempre esteve presente, mas foram necessárias diversas descobertas anteriores (entre elas: números complexos, plano complexo e etc.) para que pudéssemos acessá-la. Assim como atualmente existem muitos outros entes desta realidade que ainda não pudemos ter contato, pois, de alguma maneira, nos faltam os alicerces para tal. 
     Desta maneira vemos que a analogia ou ideia da matemática (ou mesmo da arte) residir um mundo à parte ao mundo físico, e dos matemáticos (e de alguns artistas) como exploradores deste mundo, é adequada. 

    Inclusive este artigo pode ser visto como uma introdução para uma de minhas mais recente "viagens" a este mundo, algumas explorações (ou experimentos) que fiz sobre o conjunto de Mandelbrot e que posso dizer, se mostraram, no mínimo, fascinante. Visto que realmente acabei descobrindo "coisas novas". Novas, pelo menos, para mim (rs).

   O resultado de tais experimentos, será certamente tema de um futuro post.

    Links relacionados:

      O mundo platônico da matemática


1.   "Mathematics itself indeed seems to have a robustness that goes far beyond what any individual mathematician is capable of perceiving. Those who work in this subjetct, whether they are actively engaged in mathematical research or just using results that have been obtained by others, usually feel that they are merely explorers in a world that lies far beyond themselves - a world which possesses an objeticivity that transcends mere opinion, be that opinion their own or the surmise of others, no matter how expert those others might be." (The Road to Reality, pg.13)

segunda-feira, 6 de agosto de 2018

O mundo platônico da matemática




      Platão já mencionava a existência de um "mundo" ideal. Um mundo perfeito e externo ao nosso, onde existe a perfeição, tanto das ideias quanto das formas matemáticas. Como contraste a este mundo podemos pensar na nossa realidade material, onde nosso cérebro e mente, imprecisos e imperfeitos como são, relacionam como podem elementos racionais e emocionais.  Podemos dizer que, assim como o mundo (platônico) da matemática é o mundo da perfeição, o mundo físico é a morada da imperfeição.  Mesmo que em nossa imaginação consigamos vislumbrar a mais perfeita das formas, é muito difícil, pra não dizer impossível, trazê-la (ou materializá-la) em nossa realidade existência/física. 
      Eis um exemplo para elucidar esta ideia. Imaginemos um cubo. Com forma e dimensões exatas, perfeitas, impecáveis! Agora vamos nos empenhar a trazê-lo do mundo da imaginação para a realidade concreta/física, ou seja, vamos construir este cubo. Podemos tentá-lo fazendo uso dos mais resistentes e maleáveis materiais disponíveis, empregando as melhores e mais modernas técnicas e máquinas disponíveis. Aí surge uma pergunta: será que o resultado será um cubo perfeito?  E a resposta é um (perfeitamente redondo) não!  É muito provável que diante de um microscópio, à menor ampliação possível, já se evidenciem suas falhas. Não falhas estruturais, mas descontinuidades, sinuosidades, entre outras imperfeições. E quanto mais ampliamos mais imperfeições aparecem. Até surgir a descontinuidade última, assim que adentrarmos a  escala atômica.  Por outro lado, no mundo da matemática, o cubo perfeito não possui qualquer falha. Podemos ampliá-lo indefinidamente, atribuindo-lhe as dimensões de uma galáxia! Mas mesmo assim, nenhuma imperfeição ou irregularidade é encontrada. Continua totalmente uniforme e perfeito. Com suas medidas e formas indiscutivelmente exatas, de vértice à vértice!
    Será que foi possível compreender ou visualizar um pouco do que se trata este mundo da perfeição matemática, que é o mesmíssimo mundo ideal citado por Platão?
   Vamos deixar claro que este mundo platônico não se trata de um mundo "real" propriamente dito. Mas sim de uma ideia, uma concepção de um mundo cuja existência, segundo Roger Penrose, "é realmente apenas a objetividade da verdade matemática", ou seja, algo só possui uma existência platônica se estiver inserido na verdade objetiva da matemática. Tentando esclarecer melhor este ponto cito mais este trecho:
       (Daqui em diante citarei diversos trechos do livro que me inspirou a escrever este post e a batizar este blog: "The Road to Reality" de R. Penrose. Obs.: Tradução livre, textos originais no fim da postagem)

     "As formas matemáticas do mundo de Platão, nitidamente não possuem o mesmo tipo de existência tal qual outros objetos ordinários do mundo físico, como por exemplo mesas e cadeiras. Também não possuem localização espacial; nem existem no tempo. Noções matemáticas objetivas precisam ser compreendidas como entidades atemporais e não devem ser vistas como trazidas à existência no momento em que foram humanamente percebidas." ¹  (pg. 17)

E ainda:

"A existência platônica, a meu ver, refere-se à existência de um padrão externo objetivo que não depende de opiniões individuais, nem de nossa cultura particular." ² (pg. 13).

  Deixando assim bem claro que esta objetividade matemática está além da opinião ou percepção do indivíduo, e, por isso mesmo, esta deve ser a linguagem utilizada pela ciência. 

Vou concluir este texto apenas citando (com minhas próprias palavras) algo que Penrose diz, no intuito de ajudar o leitor a compreender melhor este conceito: todo o infinitamente complexo fractal conhecido como "conjunto de Mandelbrot", não foi "descoberto" por Bernoit Mandelbrot, nem foi criado no momento em que os matemáticos plotaram pela primeira vez suas intricadas rendas e vórtices; revelando-se, provavelmente, muito mais elaborado e complexo do que Bernoit e outros pesquisadores anteriores a ele (R. Brooks e J. P. Mateslky), poderiam conceber. Também não surgiu no momento em que a concepção geral de tal forma foi idealizada. Na verdade, o conjunto de Mandelbrot sempre existiu no "mundo da matemática".  
                    
                        "Estes designs já "existiam", desde o início dos tempos, no sentido potencial atemporal de que seriam necessariamente revelados precisamente na forma que os percebemos hoje, não importa que horas ou em que local algum ser pensante tenha escolhido examiná-los". (pg. 17) ³

         Eis aqui a imagem utilizada pelo autor para ilustrar as conexões entre o mundo físico, o mundo da matemática e mundo mental.  

Três mundos e três profundos mistérios entre suas conexões


   Em breve pretendo fazer um post inteiramente dedicado à interpretação desta imagem, segundo a ótica de Penrose.  

  
1. "The mathematical forms of Plato's world clearly do not have the same kind of existence as do ordinary physical objects such as tables and chairs. They do not have spatial locations; nor they do exist in time. Objective mathematical notions must be thought of as timeless entities and are not to be regarded as being conjured into existence at the moment that they are first humanly perceived". 2.  "Platonic existence, as I see it, refers to the existence of an objective external standart that is not dependent upon individual opinions nor upon our particular culture".  
  3. "Those design were already "in existence" since the beginning of time,  in the potencial timeless sense that they would be necessarily be revealed precisely in the form that we perceive them today, no matter in what time or in what location some perceiving being might have chosen to examine them."





quinta-feira, 2 de agosto de 2018

Nova proposta - Arte e Ciência




                                      

Já havia escrito apresentações anteriormente, mas foi na época em que eu acreditava que este blog seria quase que exclusivamente sobre programação. Mas tive uma epifania (ou insight) e percebi que a programação é simplesmente um meio. Notei que a maioria dos projetos em que me envolvo são naturalmente relacionados a (ou tem por finalidade) unir minhas paixões: arte e ciência. Por isso não deixarei de falar em programação, visto que é uma ferramenta quase imprescindível para o meu intento, mas provavelmente escreverei mais sobre minhas buscas e descobertas neste âmbito. 

 Talvez o que realmente me direcionou neste sentido, foi provavelmente o mesmo sentimento ou pensamento, que norteia e norteou ao longo da história, diversos cientistas: que o universo possui, em todos os seus níveis e escalas, isto é, do micro ao macro, uma ordem inacreditavelmente equilibrada e que transcende qualquer noção de organização que ainda possamos vislumbrar. Ou seja, minha maior descoberta, até agora, foi ver que a beleza e elegância não estão presente apenas na arte, na natureza e no universo, mas igualmente, na matemática. E que a arte e o conhecimento não são excludentes, mas complementares. Em outras palavras, quanto mais adquiro conhecimento e percebo melhor esta ordem e equilíbrio, mais belos o universo e a natureza me parecem.

        Saindo do âmbito pessoal, não temo afirmar que, possivelmente, essa também tenha sido uma das maiores descobertas da humanidade nos últimos milênios. Desde Pitágora, passando por Newton, Maxwell e Einstein (entre outros), constatou-se, que as melhores explicações dos fenômenos da natureza residiam em fórmulas pequenas, admiravelmente simples e elegantes. Como se o universo tentasse nos mostrar que é elegante não apenas em sua aparência, mas também o é em toda sua essência, incluso em seus mecanismos de manifestação. Esta constatação, foi tão importante, que, ao que consta, baliza as atuais pesquisas científicas, em especial a física. Como exemplo cito a teoria das supercordas, que por mais ousada que pareça, recebeu enorme crédito, justamente por conter em sua formulação uma matemática indiscutivelmente elegante.     

        Parece que, ao menos por ora, consegui definir melhor as metas deste blog, assim como minhas próprias metas, fazendo com que os leitores entendam uma pouco mais sobre mim e como pretendo preencher esse calhamaço de páginas virtuais, em branco, que vejo diante de mim.       

                          
                
                


                                          

terça-feira, 12 de dezembro de 2017

Apresentação 2

   

       
             
         Quando tive contato com um computador pela primeira vez (por volta de 1985/86) não haviam muitos jogos, muito menos internet. O que havia era um manual de linguagem BASIC. Então, para fazer surgir algo interessante na tela, eramos meio que obrigados a "aprender" a programá-lo! Ponho aspas no aprender, pois na verdade, apenas digitávamos os códigos que vinham nos livros e revistas que nos chegavam às mãos. Mas neste processo, inevitavelmente, aprendia-se alguma coisa.

         Era tudo muito mais difícil. Esqueça Windows...não existia...não para o meu computador. Tudo era digitado em uma tela preta. Até pra tarefas simples, como carregar um jogo (quando este finalmente apareceu), era preciso saber algum comando.
         Hoje, fico feliz ao ver que a coisa aconteceu desse jeito, parece que me ajudou a perder o medo de estudar e aprender "coisas difíceis", dentre elas a arte da programação. 




     
         Tentando sintetizar em poucas palavras a missão deste blog: que aqui seja um campo de troca de informações, experiências e principalmente, fonte de inspiração, tanto para os "macacos velhos", quanto aos novatos da programação. E pra finalizar, cito Einstein: "O único lugar onde sucesso vem antes do trabalho é no dicionário." Então, mão à obra!

   Um abraço!


sexta-feira, 1 de abril de 2016

Apresentação





Olá, bem vindo ao blog. Aqui escreverei sobre alguns dos meus estudos e projetos ligados à programação, ciência, música e etc.

     Espero que apreciem.

  Um abraço

 Rodrigo



Programando o Dreamcast - Parte 2