Pergunta

Para um projeto de termo universitário, estou trabalhando em uma malina gráfica (estou ciente da contradição em termos: P) que usa uma tela isométrica. O que estou tentando descobrir é que, como desenhar todos os ladrilhos é estupidamente caro e desnecessário, estou querendo descobrir um algoritmo relativamente rápido para determinar quais ladrilhos devem ser desenhados para caber dentro de uma janela nxmpx, dado que o ladrilho Os gráficos são xxypx.

Não estou fazendo uma rolagem suave para isso, então isso não é um problema. Também não estou preocupado em ser perfeito - um pouco desnecessário é bom, eu simplesmente não quero desenhar uma enorme quantidade de azulejos desnecessários que não aparecem no jogo.

Foi útil?

Solução

Você precisa pensar em dois conceitos: espaço na tela e espaço mundial. Estes são muito importantes nos motores 3D, mas se aplicam a todos, exceto nos jogos muito mais simples. No motor isométrico, seu espaço mundial é uma variedade 2D de ladrilhos.

Então, você está procurando primeiro de tudo a uma maneira de encobrir entre esses dois espaços coordenados. Depois de fazer isso, será óbvio que o espaço da tela mapeia o mundo como um retange que virou 45 graus. Você pode determinar uma fórmula para isso, mas só é importante se você estiver tentando determinar qual parte do espaço mundial é visível para que você simule apenas monstros nessa área (uma eficiência necessária em consoles de 8 bits, provavelmente não em um PC moderno! ). Quando se trata de renderização real, você realmente não precisa determinar essa região visível do mundo, porque está implícita na maneira como você torna os ladrilhos na tela:-

  1. Você calcula qual localização de ladrilhos está no canto superior esquerdo da tela, ligue para isso (para origem) - isso será um deslocamento fixo do seu ponto de interesse, geralmente o jogador, que você deseja manter no centro do a tela.
  2. Depois de pintar os ladrilhos na linha superior da tela, pisando +1x e -1y no espaço mundial para cada ladrilho (se você estiver olhando para o nordeste).
  3. Então você pinta a linha abaixo. Isso é compensado menos meia largura de ladrilhos no espaço da tela e começa em O -1x no espaço mundial.
  4. Você repita as etapas 2 e 3, modificando sua posição inicial no espaço mundial em -1 em x e y do que você usou no estágio 2 anterior até chegar à parte superior da tela.

Outras dicas:-

  • Obviamente, você não desenha ladrilhos que estão fora do mapa. Você também pode, dependendo do design do jogo, não desenhar ladrilhos para fora de uma sala específica em que o jogador está.
  • Não há apenas ladrilhos para desenhar, há também jogadores, monstros, cenários, etc. A regra é que você desenha tudo em uma localização do mundo paricular no mesmo passe. Dessa forma, objetos mais próximos da 'câmera' obscurecerão as coisas por trás deles (e é por isso que você começa a desenhar na parte superior da tela).
  • Além disso, você não tem apenas ladrilhos de piso na maioria dos motores ISO, também teria móveis e segmentos de parede. Você pode designar áreas do mapa como pertencentes a uma sala específica, quando o foco está naquela sala (porque o jogador está nela, por exemplo), você não desenha os segmentos de parede para o lado da sala mais próxima da câmera .

De qualquer forma, é o suficiente para continuar, espero que seja útil e seu projeto corra bem.

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