Introdução a Terrenos

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:

 Criando Terrenos 

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


 

 Nível de Detalhes 

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.

 Modificando o Terreno 

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.
   ModifyTerrain terrain,16,16,.5


 

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.

 Texturizando Terrenos 

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.

Copyright 2001 (c) Paul Gerfen - GamecodingUK