6. Iluminação Objetivo: Iluminar uma cena |
|
Agora que já
podemos mover objetos (e nós mesmos), texturizar objetos, animar... então
o que faremos agora?
Que tal iluminação? Usada corretamente nós podemos fazer
nosso pequeno mundo ganhar uma melhor ambientação.
Por padrão, o B3D já nos dá uma luz em nossa cena, apontando
diretamente na tela. Pense nisto como uma tocha presa em cima da câmera,
iluminando tudo o que podemos ver.
Código-fonte:
Graphics3D 800,600 SetBuffer BackBuffer() camera=CreateCamera() CameraViewport camera,0,0,800,600 AmbientLight 0,0,0 ;cube 1 cube=CreateCube() PositionEntity cube,0,0,5 light=CreateLight(3) LightColor light,100,20,30 LightConeAngles light,0,45 PositionEntity light,0,0,0.5 LightRange light,8 PointEntity light,cube ;cube 2 cube2=CopyEntity(cube) PositionEntity cube2,-5,0,8 light2=CreateLight(3) LightColor light2,40,150,60 LightConeAngles light2,0,45 PositionEntity light2,-5,0,4.5 LightRange light2,8 PointEntity light2,cube2 ;cube 3 cube3=CopyEntity(cube) PositionEntity cube3,5,0,8 light3=CreateLight(3) LightColor light3,70,80,190 LightConeAngles light3,0,45 PositionEntity light3,5,0,4.5 LightRange light3,8 PointEntity light3,cube3 While Not KeyHit(1) TurnEntity cube,0.1,0.2,0.3 TurnEntity cube2,0.3,0.2,0.1 TurnEntity cube3,0.3,0.2,0.1 UpdateWorld RenderWorld Text 310,500,"Demonstração de Iluminação" Flip Wend End |
Há vários
comandos novos a serem observados aqui.
Se lembre daquela tocha sobre a qual eu falei? Bem o primeiro comando novo que
nós aprenderemos é estritamente por mudar a cor dessa luz.
AmbientLight 0,0,0 |
Isto deixa a luz ambiente na cor preto (sem luz), de forma que qualquer luz
adicional que nós usarmos terá seu efeito maximizado. A primeira
coisa a se lembrar é que quando usamos este comando os valores de cor
variam de 0 a 255, e nós temos 3 cores separadas: VERMELHO, VERDE &
AZUL. (RGB, igual a uma TELEVISÃO)
Mudando estes valores nós podemos conseguir qualquer cor que nós
quisermos, como dexiar tudo em 255 resultará na cor branca. É
normalmente mais fácil trabalhar com estes valores em um programa de
desenho como o Paintshop Pro.
light=CreateLight(3) |
O B3D nos deixa usar três tipos diferentes de luzes. Como com a instrução Animate estes são selecionados com parâmetros. Eles são:
1: LUZ DIRECIONAL - Como a luz
do Sol, que ilumina tudo para onde ela aponta. 2: PONTO DE LUZ - Como uma lâmpada, iniciando em um ponto e enfraquecendo ao redor 3: CONE DE LUZ- Como uma tocha, se inicia em um ângulo e termina em outro ângulo maior. |
Para esta demonstração eu escolhi usar a forma CONE DE LUZ.
LightColor light,100,20,30 |
O mesmo que na instrução AmbientLight, este comando nos deixa selecionar a cor da luz. Aqui eu defini na forma VERMELHO=100, VERDE=20 e AZUL=30 que nos dá um brilho avermelhado agradável.
LightConeAngles light,0,45 |
Nós usamos esta instrução para controlar o ângulo de luz que vem de nosso refletor. Neste caso eu fixei em 45 graus. Em outras palavras: A luz tem um raio de 45 graus, qualquer parte do objeto que está fora disto não será iluminada.
PositionEntity light,0,0,0.5 |
Posicionamos a luz.
LightRange light,8 |
Isto controla o alcance da luz, que eu fixei em 8 unidades. Se eu quisesse que a luz iluminasse mais distante então eu aumentaria este valor.
PointEntity light,cube |
Este comando apontará a luz para nosso cubo. Não importa onde a luz esteja, ela apontará para o cubo. Mas se depois você move o objeto ou a luz então você terá que reapontar com este comando.
Outra coisa que
você deve ter em mente é se a luz e objeto podem ver um ao outro.
(dependendo do alcance da luz)
Eu não entrarei
em detalhes no resto do programa. Você deve ser capaz de entender o que
está acontecendo sem ajuda adicional.
Onde estão os efeitos de raios de luz? Bem, no momento o B3D não
tem nenhum comando embutido para isso - sendo assim você mesmo tem que
programar isso. E acredite em mim, é possível com pouco esforço.
Eu vi alguns dos testadores beta fazendo efeitos de iluminação
que se igualam a Unreal! Mas esse é assunto para outro tutorial...