Estou tentando renderizar a parte visível de um mapa isométrico em forma de diamante. O sistema de coordenadas "mundo" é um sistema cartesiano 2D, com as coordenadas aumentando na diagonal (em termos do sistema de coordenadas da vista) ao longo dos eixos. As coordenadas da "visualização" são simplesmente deslocamentos do mouse em relação ao canto superior esquerdo da visualização.
Meu algoritmo de renderização funciona desenhando vãos diagonais, começando no canto superior direito da vista e movendo-se na diagonal para a direita e para baixo, avançando para a próxima linha quando atingir a borda direita da vista. Quando o loop de renderização atinge o canto inferior esquerdo, ele para.
Existem funções para converter um ponto das coordenadas da vista em coordenadas do mundo e depois mapear as coordenadas.
Tudo funciona ao renderizar a partir do bloco 0,0, mas à medida que a exibição rola ao redor da renderização, é necessário iniciar de um bloco diferente. Não consigo descobrir como determinar qual bloco está mais próximo do canto superior direito.
No momento, estou simplesmente convertendo as coordenadas do canto superior direito para mapear as coordenadas. Isso funciona desde que a origem da visualização (canto superior direito) esteja dentro do mundo, mas ao se aproximar das bordas do mapa, as coordenadas iniciais do bloco obviamente se tornam inválidas.
Acho que isso se resume a perguntar "como posso encontrar a interseção entre o eixo X do mundo e o eixo X da vista?"
Respostas:
Na verdade, você pode não ter dados para o local, mas não deve haver nada de errado em usar a mesma fórmula.
Se você deseja sugestões de como superar os possíveis problemas, pode nos mostrar o trecho de código apropriado.
Edit:
Apenas para esclarecer, digamos que você tenha um mapa de blocos de 100x100, indexado de 0 a 99. Para renderizar, você faria algo assim:
fonte
continue
o loop de renderização até que o bloco atual esteja dentro do mapa e da visualização. Vou tentar assim que encontrar algum tempo! :)