tActor* Previous;
g; // tActor
Programa7.3: Denic~aode ator.
Observando o Programa7.3, podemos perguntar: se um ator e um objeto de uma cena, onde, em
tActor
, armazenamoso modelo quedescreve aestrutura eo compor-tamento do objeto? A resposta e: emMapper
. (Lembremos que um mapeador e um processoconsumidorquetomacomoentradaumrepositoriodedados.)Mapper
eo res-ponsavel pela transformac~ao dos dados estruturais e comportamentaisdo modelo nos primitivosgracos que constituir~ao a imagem da cena. Deniremos a implementac~ao de um mapeador noCaptulo 10(veja a classetMapper
).C^ameras
Uma c^amera dene a porc~ao da cena que sera visualizada pelo observador. A Figu-ra7.13 mostraospar^ametrosde umac^amera. A posic~aoeopontoondeac^ameraesta, ou seja, a posic~ao do observador. O ponto focal e o ponto para o qual a c^amera esta apontando. As coordenadas da posic~aoe o doponto focals~ao tomadasem relac~aoao sistemaglobal de coordenadas (WC). O vetor formado peladiferenca dopontofocale da posic~ao dene a direc~ao de projec~ao da c^amera. O plano de projec~ao, ou plano de vista,eoplano perpendicularadirec~aode projec~aoquecontemopontofocal. Ovetor unitarionormal aoplano de vistaechamadoVPN (view planenormal).
A janela e a porc~ao retangular sobre o plano de vista que dene a altura H e a largura W da imagem tomada pela c^amera. A janela e orientada em relac~ao a um sistema de coordenadas Cartesianas denominado sistema de coordenadas de vista, ou VRC (view reference system). A origem do VRC e o ponto focal e o eixo n do VRC, normal aoplano de projec~ao,e dado pelo VPN. Para denirmos os outros dois eixos, usamosumvetorchamado\paracima",tomadoemrelac~aoaoWC.Aprojec~aoparalela ao VPN dovetor \para cima" noplano de projec~ao, dene o eixo v. O eixo ue dado diretamente peloproduto vetorial
projec~ao janela plano de W VPN v vetor focal ponto WC O x n u H VRC y z posic~ao da c^amera D projec~ao direc~aode \para cima"
Figura 7.13: Par^ametros de uma c^amera.
Para denirmosaporc~aodacenaobservadapelac^amera,chamadavolume devista, devemos especicar qual o tipo de projec~ao utilizada. Consideraremos somente dois tipos de projec~ao: a projec~ao paralela ortograca e a projec~ao perspectiva. Em uma projec~aoparalela,aposic~aodac^ameraeutilizadaapenas paraespecicar,juntamente com o ponto focal, a direc~ao de projec~ao. Em uma projec~ao paralela,supomos que o observador esta no \innito"; dessa forma, os raios de luz que chegam ao observador s~ao paralelos. O volume de vista, nesse caso, e um paraleleppedo innito, tal como mostrado naFigura7.14(a). Na projec~aoperspectiva,oobservador situa-serealmente na posic~ao dac^amera;os raios quechegam aoobservador \passam" pelajanelae con-vergemparaaposic~aodac^amera,tambemchamada,nesse caso,decentrode projec~ao. O volume de vista e um tronco de pir^amide semi-innito, com vertice no centro de projec~ao,Figura7.14(b). Naprojec~aoperspectiva,alarguraW dajanelaeadist^ancia D entre a posic~ao eo ponto focal denem o^angulo de vista dac^amera,dado por
=2arctan W 2D : (7.8)
Ambososvolumesdevistapodemserdelimitadospordoisplanos,paralelosaoplanode projec~ao,chamados planosde recorte. A posic~aodosplanose denidapelasdist^ancias F (planode frente) eB (planode fundo),tomadassobreadirec~aode projec~aoapartir da origem doVRC.
Aimplementac~aoCde umac^ameraemostradanoPrograma7.4. Aestrutura
tCa-mera
mantemotipoProjectionType
de projec~aodac^amera, aposic~aoPosition
,o ponto focalFocalPoint
,o vetor \para cima"ViewUp
,a dist^anciaDistance
entre a posic~aoe opontofocal,a larguraWidth
dajanelae araz~ao de aspectoAspectRatio
da janela (a raz~ao de aspecto e a raz~ao W=H entre a largura e a altura da janela). Os demais atributos denem as dist^ancias
ClipDist
dos planos de recorte, as agsClipFlag
, indicando se os planos de recorte est~ao ativos ou n~ao, uma matriz de vi-sualizac~aoViewMatrix
(explicadaaseguir) eosponteirospara oselementosposteriorF B plano de fundo centrode projec~ao frente plano de planode fundo focal ponto plano de vista planode frente
(a) Projec~ao paralela plano de vista (b) Projec~aoperspectiva B F ponto focal
Figura7.14: Volumesde vista.
Apenas para ilustrar o funcionamento da c^amera, vamos descrever o processo de rendering de uma imagem o-de-arame de um modelo de cascas. Uma imagem o-de-arame e o tipo mais simples de imagem de um modelo implementado em OSW. Por isso mesmo, e a mais rapida de ser gerada. Usaremos imagens o-de-arame para posicionar os objetos na cena, antes de solicitarmos uma imagem com luz. Os passos dorenderingo-de-arame s~aoenumerados a seguir.
Passo 1 Paracadaarestaedomodelodecascas,denidapelosverticesdecoordenadas P
1 e P
2
, executaremos os passos2 ate5. Passo 2 Normalizac~ao. Primeiramente,ospontosP
1 eP
2
daarestae s~ao normaliza-dos. Normalizar um ponto signica transformar suas coordenadas, dadas no WC, para ascoordenadas doVRC. Alem disso,efetuaremos a transformac~ao das coordenadas do volume de vistapara um volume de vista can^onico. Dois volumesde vistacan^onicoss~aoapresentadosnaFigura7.15,paraasprojec~oes paralelaeperspectiva. A func~aode um volumede vistacan^onicoefacilitara operac~ao seguinte, chamada recorte. A transformac~ao de normalizac~ao para a projec~ao paralelae denida por uma matriz de transformac~ao obtida pela composic~aodas seguintes transformac~oes:
1. Translac~aodopontofocalpara o origemdo sistemaglobal.