Pergunta

Eu estou programando um pedido de com memória limitada (512k flash, 32K RAM).

O exibição neste dispositivo é 128x160 com cores de 16 bits, que normalmente consomem 40k ram se eu fosse para o buffer no meu processador. Eu não tenho que muito RAM, por isso estou procurando técnicas, dicas, truques, idéias para gerar dados da tela em tempo real.

coisas que podem ajudar:

  • Talvez você sabe de um recurso para este tipo de limitação
  • Talvez você tenha gerado gráficos atraentes na mosca
  • Existe um algoritmo genérico que eu poderia usar para combinar elementos em memória de programa (incluindo alpha blending) na mosca enquanto eu digitalizar a exibição
  • vetor simples técnicas de renderização (ou livre (BSD / MIT / apache) source)
  • ???

Eu tenho um multiplicador, mas processador de ponto não flutuante. A exibição em si tem um controlador muito simples e memória para o display -. Mas leituras e gravações são caros, então eu não quero usar isso como meu espaço de trabalho se eu puder evitá-lo

-Adam

Foi útil?

Solução

De certa forma, você está em praticamente os mesmos desenvolvedores de jogos situação onde na época dos Tandys, Espectros e início dos PCs. Então, aqui vai a minha recomendação:

Você deve ler escritos Michael Abrash em computação gráfica. Eles foram escritos em um momento em que um co-processador de ponto flutuante foi uma parte opcional de hardware, e eles descrevem uma série de técnicas básicas (linhas Bresenham, etc.) usado no antigo (supostamente 'ruim') dias processado por software .

Você pode ler a maior parte de seu "Livro Negro" aqui .

Adicionalmente, você pode provavelmente encontrar um monte dos arquivos antigos BBS que a maioria das pessoas utilizado de volta no dia de aprender programação gráfica aqui . Basta procurar por gráficos, linhas e quais não.

Espero que ajude!

Update: Também me lembro usando este em minhas primeiras tentativas de desenhar coisas na tela. Não posso dizer quanto tempo eu gasto tentando entender a matemática por trás dele (bem, para ser justo eu era como 15 anos na época). Muito bom (e simples) introdução ao 3D, e uma agradável premier nas transformações, polígono-cargas e interpolação.

Outras dicas

Que tipo de dados você vai mostrar na tela?

Se não for imagens fotográficas, você poderia considerar o uso de uma paleta. Por exemplo:. A paleta de cores 256 usando 8 bits por pixel exigiria 20kb, (mais 256 x 2bytes para a tabela de pesquisa) que, pelo menos, é melhor do que 40 kb

Eu acredito que a técnica básica para lidar com este tipo de situação é dividir a tela em listras horizontais estreitas, e somente tampão dois desses listras na RAM. Uma faixa será exibido, enquanto você processar o próximo para baixo. Quando a digitalização 'feixe' atinge a próxima faixa (e dispara uma interrupção para você pegar), você trocar os dois e começar a desenhar a próxima para baixo faixa.

Um efeito colateral desagradável disso é que que você tem duras limite de tempo em quanto tempo você pode gastar em tornando cada faixa. Então eu acho que seria tentador para ficar com algo chato, mas com um desempenho previsível, como sprites.

Um pouco offtopic mas isso é como funciona o hardware Nintendo DS 3D. Você pode vê-lo se você tentar tornar demasiados polígonos em torno da mesma coordenada y -. Polys aleatoriamente cintilação e vai cair fora como a tela de atualização ultrapassa o hardware de renderização

Além disso, eu segunda sugestão do outro cartaz que você usa renderização palettised. É muito difícil de fazer matemática rápida em 16bit pixels, mas mais rápido em 8bit Se você é inteligente sobre como você colocar para fora sua paleta.

Algumas idéias que combinam gráficos agradáveis ??e pouca memória:

  • fundos de loja e sprites em Flash.
  • loja gerado dinamicamente gráficos em RAM usando uma paleta de metade dos bytes.
  • Use o recurso de janelas do controlador de LCD com apenas atualizar a parte da tela que você precisa.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top