Entidades de terreno são usadas para criar
paisagens muito grandes feitas de muitos, muitos triângulos - até
mesmo um milhão ou mais!
De fato, desenhar estes muitos triângulos seria um processo muito lento,
assim terrenos usam uma técnica conhecida como 'nível dinâmico
de detalhe' (LOD) para acelerar as coisas.
Isto significa basicamente que em vez de desenhar todos os triângulos
em um terreno, um número menor de triângulos é usado para
fazer uma aproximação do terreno.
Terrenos têm alguns limitações:
Você pode criar terrenos carregando uma
imagem (heightmap), ou criando um terreno 'liso' e definindo você mesmo
a altura de cada vértice.
Uma imagem de heightmap simplesmente é uma imagem em preto-e-branco onde
pixels mais escuros representam pontos mais baixos, e pixels mais claros representam
pontos mais altos. Uma imagem de heightmap deve ser de um tamanho de terreno
válido - 2x2,4x4,...,256x256,...
Quando um terreno é criado, sua largura e profundidade são igual
ao tamanho do terreno, e sua altura é 1. Por exemplo, se você cria
um terreno usando:
terrain=CreateTerrain( 32 )
O terreno estenderá de 0 a 32 ao longo dos eixos x e z, e de 0 a 1 ao
longo do eixo y.
Porém, você é livre para posicionar e escalar o terreno
como você quiser, usando os comandos de manipulação de entidades
como ScaleEntity, PositionEntity. Por exemplo:
;o terreno é 32 x 1 x 32 terrain=CreateTerrain( 32 ) ;o terreno é agora 320 x 100 x 320 ScaleEntity terrain,10,100,10 ;e centralizado (nos eixos x/z) em 0,0,0 PositionEntity terrain,-160,0,-160 |
Você pode controlar diretamente quantos
triângulos são usados para montar um terreno usando o comando de
TerrainDetail.
Usando menos triângulos resultarão, naturalmente, em velocidade
melhor, mas note que abaixo de um certo número seu terreno começará
a se comportar muito estranhamente!
Por exemplo, se você pedir para o Blitz3D que faça um terreno de
1,000,000 de triângulos usando apenas 100 triângulos, é bem
provavél que ele não consiga fazer um trabalho decente.
Isto normalmente conduz a um fenômeno conhecido como 'estouro', onde vértices
mudam de posição subtamente quando a camera se movimenta.
Assim qual número de triângulos deveria ser usado? Bem, isto definitivamente
é uma questão de 'tentativa e erro' e depende de vários
fatores:
Você pode reduzir o número de triângulos necessários para representar um terreno usando os truques seguintes:
Gerar um terreno perfeito com mínimo
de estouro é tanto uma arte como uma ciência.
O Blitz3D também provê uma técnica chamada 'vertex morphing'
para ajudar reduzir os estouros. O vertex morphing automaticamente alisa um
pouco o terreno, reduzindo os estouros. O comando TerrainDetail também
é usado para habilitar o vertex morphing.
O comando ModifyTerrain é usado mudar a altura de um vértice do terreno, por exemplo:
;cria um terreno tamanho 32. terrain=CreateTerrain( 32 ) ;puxa o vértice central
50% para cima. |
Os parâmetros usados com o ModifyTerrain devem ser dados em 'coordenadas de terreno'. Isto significa que os valores x e z sempre devem ser de 0 ao tamanho do terreno, e o valor de altura sempre deveria ser de 0 a 1. Esse comando ignora qualquer escala, posição ou rotação aplicadas ao terreno.
Por padrão o terreno que você cria será apenas de uma cor, sem texturas, mas usando o comando EntityTexture é possível aplicar uma textura à paisagem inteira. Infelizmente não é possível aplicar diferentes texturas em diferentes partes do mesmo terreno. Mas não se preocupe! Se lembre que uma entidade pode ter 8 textures aplicados a ela. Construindo estas texturas cuidadosamente é possível ter diferentes texturas atuando em diferentes partes do terreno.