36
Iluminación en Java 3D Este módulo presenta las técnicas para proporcionar detalles de los objetos visuales a través de sombras y texturas. Esta página explica el modelo de iluminación y cómo utilizar luces en Java 3D para conseguir sombras. Java 3D sombrea los objetos visuales basándose en la combinación de sus características materiales y en las luces del universo virtual. El sombreado resulta de aplicar un modelo de iluminación a un objeto visual en presencia de fuentes de luz. La siguiente sección da una descripción del modelo de iluminación usado en el renderizador de Java 3D y cómo la luz interactúa con las características materiales para proporcionar sombreado. Cada una de las siguientes secciones explica las características relevantes del API Java 3D para el modelo de iluminación. Sombreado en Java 3D Sombrear objetos visuales en Java 3D depende de muchos factores. Esta sección proporciona una descripción abreviada del modelo de iluminación de Java 3D, del modelo de color, y del modelo de sombreado. La especificación del API Java 3D presenta una información más detallada sobre el modelo de iluminación de Java 3D. Como la mayor parte de la iluminación de Java 3D y del modelo de sombreado se basa en OpenGL, se puede encontrar más información en páginas sobre OpenGL. Modelo de Iluminación En el mundo real, los colores que percibimos son una combinación de las características físicas del objeto, de las características de las fuentes de luz, de las posiciones relativas de los objetos a las fuentes de luz, y del ángulo desde el cual se ve el objeto. Java 3D utiliza un modelo de iluminación para aproximar la física del mundo real. El resto de esta sección explica el modelo de iluminación de Java 3D en términos generales. La sección E.2 de la especificación del API Java 3D presenta las ecuaciones matemáticas para el modelo de iluminación Java 3D. La ecuación del modelo de iluminación depende de tres vectores: la superficie normal (n), la dirección de la luz (l), y la dirección al ojo del espectador (e) además de las características materiales del objeto y de las características de la luz. La Figura 6-1 muestra los tres vectores para dos vértices de una superficie esférica. Los vectores para cada vértice pueden tener distintas direcciones dependiendo de específicidades de la escena. Cuando los vectores de la luz y del ojo varían, se cálculan en tiempo de ejecución. Por lo tanto, cada vértice de la esfera potencialmente se renderiza como una sombra diferente.

Iluminación en Java 3D

  • Upload
    lukas

  • View
    357

  • Download
    1

Embed Size (px)

Citation preview

Iluminacin en Java 3DEste mdulo presenta las tcnicas para proporcionar detalles de los objetos visuales a travs desombras y texturas. Esta pgina explica el modelo de iluminacin y cmo utilizar luces en Java3D para conseguir sombras. Java3Dsombrealos objetos visuales basndoseenlacombinacindesus caractersticasmateriales yenlasluces deluniversovirtual.El sombreadoresulta de aplicarunmodelodeiluminacinaunobjetovisual enpresenciadeuentesdeluz. !asiguienteseccindaunadescripcindel modelodeiluminacinusadoenel renderizador deJava3Dycmolaluzinteract"aconlascaractersticasmaterialesparaproporcionar sombreado. #adaunadelassiguientes seccionesexplica lascaractersticasrelevantes del$%&Java 3D para elmodelo deiluminacin. Sombreado en Java 3D'ombrear objetos visuales en Java 3D depende de muc(os actores. Esta seccin proporcionaunadescripcinabreviadadelmodelode iluminacin de Java 3D) del modelodecolor) ydelmodelo de sombreado. !a especi*cacin del $%& Java 3D presenta una inormacin ms detalladasobre el modelo de iluminacin de Java 3D. #omo la mayor parte de la iluminacin de Java 3D ydel modelo de sombreado se basa en OpenGL) se puede encontrar ms inormacin en pginassobre OpenGL. Modelo de IluminacinEn el mundo real) los colores +ue percibimos son una combinacin de las caractersticas sicasdel objeto) de las caractersticas de las uentes de luz) de las posiciones relativas de los objetos alasuentesdeluz) ydel ngulodesdeel cual seveel objeto. Java3Dutilizaunmodelodeiluminacin para aproximar la sica del mundo real. El resto de esta seccin explica el modelo deiluminacin de Java 3D en trminos generales. !a seccin E., de la especi*cacin del $%& Java 3Dpresenta las ecuaciones matemticas para el modelo de iluminacin Java 3D. !a ecuacin delmodelo de iluminacin dependede tres vectores- la super*cie normal.n/) ladireccindelaluz.l/) yladireccinal ojodel espectador.e/ ademsdelascaractersticasmateriales del objeto y de las caractersticas de la luz. !a 0igura 123 muestra los tres vectoresparados vrticesdeunasuper*cieesrica. !os vectoresparacadavrticepuedentenerdistintas direcciones dependiendo de espec*cidades de la escena. #uando los vectores de la luzydel ojovaran) seclculanentiempodeejecucin. %orlotanto) cadavrticedelaeserapotencialmente se renderiza como una sombra dierente. El modelo de iluminacin incorpora tres tipos de re4exiones de luz del mundo real- ambiente)diuso) y especular. !a re4exin ambiente resulta de la luz ambiente) luz constante de bajo nivel)en una escena. !a re4exin diusa es la re4exin normal de una uente de luz desde un objetovisual. !asre4exionesespecularessonlasre4exionessobreiluminadasdeunauentedeluzsobre un objeto) +ue ocurren en ciertas situaciones. !a 0igura 12, muestra una esera y un plano renderizados por Java 3D. !os tres tipos de re4exinse pueden ver en la esera de la 0igura 12,. !a parte ms oscura de la esera ex(ibe slo lare4exin ambiente. El centro de la esera est iluminado por la luz diusa y ambiente. #on unaesera azul y una luz blanca) la re4exin diusa es azul. !a parte ms brillante de la esera es elresultado de la re4exin especular con re4exiones ambiente y diusa.Ojo Local contra Vectores de Ojos Infnitos'i cada vrtice de cada objeto visual en una escena re+uiere un vector de luz) un vector del ojo)y el clculo de la sombra) una porcin signi*cativa del clculo de representacin se utiliza en losvrtices sombreados. !a cantidad de clculo puede reducirse si el vector de luz) o el vector delojo) oambos vectores sonconstantes. El vector deluz es constantecuandousaunaluzdireccional.. El vector del ojo es constante por deecto) aun+ue podemos especi*car un vectorvariable del ojo usando un mtodo del objeto View. !ectos inter"objetos no #onsiderados5ientras +ue el modelo de iluminacin se basa en la sica) los enmenos sicos complejos no semodelan. 6bviamente) la sombra ec(ada por la esera sobre el plano no est en la 0igura 12,. 7otan obvio) tambin alta la luz re4ejada de la esera sobre el plano. 8ambin alta la luz re4ejadadesde el plano sobre la esera +ue de nuevo se re4eja en el plano... etctera. $ menudo es dicil comprender la complejidad del clculo de la accin de la luz. #onsideremos ladi*cultad de calcular cmo cada gota del agua se comporta en una duc(a. !as gotas vienen de lacabeza de la duc(a en distintas direcciones. #uando encuentran un objeto) la colisin +ue resultaproduce muc(as gotas ms pe+ue9as +ue viajan en distintas direcciones. El proceso se repitemuc(as veces antes de +ue el agua se vaya por el desague. !a complejidad de interacciones dela luz con los objetos visuales es muy semejante. $lgunas de las dierencias entre loscomportamientos del agua y la luz son +ue la luz no tiene ninguna ad(erencia .luz no se pega alos objetos visuales/ y el eecto de la gravedad es insigni*cante para la luz. %ara reducir la complejidad del clculo) el modelo de iluminacin considera solamente un objetovisual al mismo tiempo. #onsecuentemente) las sombras y las re4exiones inter2objetos no sonrenderizadas por el modelo de iluminacin. Estos dos eectos re+uieren la consideracin de todoslos objetos junto con sus posiciones relativas en el momento de la representacin. 'e necesitaconsiderablemente ms clculo para renderizar una sola escena con eectos inter2objetos. Java3D) y el resto de los sistemas gr*cos en tiempo real) no (acen caso de eectos inter2objetos enlarepresentacin. $lgunosdeloseectosignoradosdel mundoreal sepuedenagregaralasescenas cuando sea necesario. Modelo de #olorEl modelodel colornoestbasadoenlasica. Java3Dmodelael colordelaslucesylosmateriales como una combinacin de rojo) verde) y azul. El color blanco) como el color de la luz odelmaterial)es la combinacin de los tres componentes con la intensidad mxima. #ada luzproduce un solo color de luz especi*cado por un tuple :;n 9ointLi&'tes elcontrario de un DirectionalLi&'t. Es una uentede luzomnidireccionalcuya intensidad se aten"a con la distancia y tiene una localizacin. .un DirectionalLi&'tnotiene ninguna localizacin) solo una direccin/. !os objetos 9ointLi&'t se aproximan a bombillas)velas) u otras uentes de luz sin re4ectores o lentes. >n modelo de ecuacin cuadrtica modela la atenuacin de las uentes9ointLi&'t. !a ecuacinse encuentra en la seccin E., de la especi*cacin del$%&Java 3D. !a 0igura 1233 ilustra larelacindeunobjeto9ointLi&'tconunaesera. 6bserva+uelosvectoresdeluznosonparalelos. !ossiguientesblo+uesdereerencialistanlosconstructoresylosmtodosde9ointLi&'t)respectivamente.'umario de #onstructores de la #lase 9ointLi&'tEl objeto 9ointLi&'t especi*ca una uente de luz atenuada en el espacio +ue irradia la luz igualmente en todas las direcciones desde la uente de luz.Boint:ig!t()#onstruye e inicializa una uente de punto de luz usando los siguientes valores por deecto- lig(t6n true color .3) 3) 3/ position .H) H) H/ attenuation .3) H) H/Boint:ig!t(olor3f color5 Boint3f position5 Boint3f attenuation)#onstruye e inicializa un punto de luz. %or deecto la luz est activa.Boint:ig!t($oolean lig!t9n5 olor3f color5 Boint3f position5 Boint3fattenuation)#onstruye e inicializa un punto de luz.'umario de 5todos de la #lase 9ointLi&'tvoid set&ttenuation(Boint3f attenuation)'elecciona los valores de atenuacin actuales de la luz y los sit"a en el parmetro especi*cado. !os tres valores especi*cados en el objeto 9oint3! especi*can los coe*cientes constante) linear)y cuadrtico) respectivamente.%atenuaciCn ) DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDconstateElinearEcuadrFticoGdistancia(donde distancia es la medida desde la uente de luz al vrtice +ue est siendo sombreado.void set&ttenuation(float constant5 float linear5 float Huadratic)'elecciona los valores de atenuacin actuales de la luz y los sit"a en el parmetro especi*cado. @er la ecuacin anterior.void setBosition(Boint3f position)'elecciona la posicin de la !uz.void setBosition(float x5 float #5 float na vez ms una ecuacin cuadrtica modelalaatenuacindebido aladistancia. El parmetroconcentracinyuna ecuacindierentegobiernan la variacin de la intensidad debido al ngulo. !as ecuaciones +ue gobiernan estoslazos se encuentran en la seccin E., de la especi*cacin del $%& Java 3D. !a 0igura 123D ilustraen ,D cmo la intensidad de luz vara desde una uente 9ointLi&'t en 3D. El ngulo de extensin de un objeto SpotLi&'tpodra (acer +ue la luz iluminara parte de unobjeto visual. Esta es la "nica luz capaz de iluminar slo una parte de un objeto visual.!os siguientes blo+ues de reerencia listan los constructores y mtodos de9ointLi&'t)respectivamente.'umario de #onstructores de la #lase SpotLi&'tSpotLi&'t es una suclase de 9ointLi&'t con los atributos de direccin) ngulo de extensin y concentracin.Spot:ig!t()#onstruye e inicializa una uente de luz usando los siguientes valores por deecto- lig(t6n true color .3) 3) 3/ position .H) H) H/ attenuation .3) H) H/ direction .H) H) 23/ spread$ngle %& .3EH degrees/ concentration H.HSpot:ig!t(olor3f color5 Boint3f position5 Boint3f attenuation5 Aector3fdirection5 float spread&ngle5 float concentration)#onstruye e inicializa un punto de luz. %uedes ver el sumario de mtodos de 9ointLi&'t para ms inromacin sobre la atenuacin. %or deecto la luz est activa.Spot:ig!t($oolean lig!t9n5 olor3f color5 Boint3f position5 Boint3fattenuation5 Aector3f direction5 float spread&ngle5 float concentration)#onstruye e inicializa un punto de luz. %uedes ver el sumario de mtodos de 9ointLi&'t para ms inromacin sobre la atenuacin.'umario de 5todos de la #lase SpotLi&'t$dems de los mtodos listados anteriormente para 9ointLi&'t) la clase SpotLi&'t tiene los siguientes mtodos-void setoncentration(float concentration)'elecciona la concentracin del punto de luz.void setDirection(float x5 float #5 float sando los lmites de in4uencia para seleccionar solamente las uentes de luz relevantes para unobjetovisual) Java3Dcreadinmicamentelasespeci*cacionesdeiluminacinparalaslucesmientras +ue se renderizan los objetos visuales. 5ientras +ue ning"n objeto sea iluminado porms de oc(o luces) los programas de Java 3D no estn limitados en el n"mero de luces en unmundo virtual. %or eso proporcionar al cuadro planos ms pe+ue9os y los lmites apropiados para asegurarse de+ue ning"n plano se ve in4uenciado por ms de oc(o luces) en el ejemplo parece +ue (ay nueveluces .realmente diez) con la luz ambiente/ iluminando un plano. 7ecesita un poco msprogramacin) pero el programa +ue resulta es ms portable. 5ientras +ue muc(asimplementaciones de OpenGLutilizan ms de oc(oluces simultneas) siestamos planeandodistribuir nuestros programas) debemos tener en cuante esta limitacin potencial. En esta seccin) algunos ejemplos muestran alguna de las caractersticas y las limitaciones de lailuminacinJava3D. !aintencindeestaseccinesdaraloslectoresalgunosejemplosdeprogramas bsicos y algunas *guras de ejemplo para comparar con sus propios programas. 7oes posible proporcionar ejemplos de cada posible situacin de iluminacin) pues los actores enla representacin son demasiado dierentes. >na "ltima cosa) 9ointLi&'t y SpotLi&'t utilizan la especi*cacin de atenuacin. !a atenuacinseespeci*capor los trminos constantes enlaecuacincuadrticainversabasadaenladistanciaentrelaluzyel vrtice.vaseel blo+uedelareerenciaanterior/. Encontrar laatenuacinapropiadaparaunaaplicacinespec*caesunproblemaartstico. 7oseincluyeningun programa de ejemplo de atenuacin en este tutorial.Objetos Material!as caractersticas materiales de un objeto visualse especi*can en elobjetoMaterialde unmanojo de aspecto. Material es una subclase de )ode#omponent. !a 0igura 123F muestra lajerar+ua de clases del $%& Java 3D para Material. El objetoMaterialespeci*cacoloresambiente) diusos) especular) yemisivoyunvalor debrillantez.#ada unodelostresprimeros coloresseutiliza en el modelodeiluminacin paracalcular la re4exin correspondiente. El color emisivo permite +ue los objetos visuales Ibrillenintensamente en la oscuridadI. El valor de brillantez se utiliza solamente para calcularre4exiones especulares. !ossiguientesblo+uesdereerenciaenumeranlosconstructoresylosmtodosdelaclaseMaterial. 'umario de #onstructores de la #lase MaterialEl objeto Material de*ne la aparienia de un objeto bajo la iluminacin.+aterial()#onstruye e inicializa un objeto Material usando los siguientes valores por deecto- ambient#olor .H.,) H.,) H.,/ emissive#olor .H) H) H/ diJuse#olor .3) 3) 3/ specular#olor .3) 3) 3/ s(ininess H.H+aterial(olor3f am$ientolor5 olor3f emissiveolor5 olor3f diffuseolor5olor3f specularolor5 float s!ininess)#onstruye e inicializa un nuevo objeto Material usando los parmetros especi*cados.!ista %arcial de 5todos de la #lase Materialvoid set&m$ientolor(olor3f color)'elecciona el color ambiente de este Material.void set&m$ientolor(float r5 float g5 float $)'elecciona el color ambiente de este Material.void setDiffuseolor(olor3f color)'elecciona el color diuso de este Material.void setDiffuseolor(float r5 float g5 float $)'elecciona el color diuso de este Material.void setDiffuseolor(float r5 float g5 float $5 float a)'elecciona el color diuso ms alp(a de este Material.void setEmissiveolor(olor3f color)'elecciona el color emisivo de este Material.void setEmissiveolor(float r5 float g5 float $)'elecciona el color emisivo de este Material.void set:ig!tingEna$le($oolean state)$ctiva o desactiva la iluminacin de objetos visuales +ue reerencian este objeto.void setS!ininess(float s!ininess)'elecciona la brillantez de este Material.void setSpecularolor(olor3f color)'elecciona el color especular de este Material.void setSpecularolor(float r5 float g5 float $)'elecciona el color especular de este Material.java.lang.String toString()Devuelve una representacin 'tring de los valores de este Material.'umario de #apacidades de la #lase Material$dems de las #apacidades (eredadas de )ode#omponent) los objetos Material tienen la siguiente capacidad-&::9=89+B96E678RE&D @ =RI7E%ermite llerGescribir inormacin de los campos individuales del componente.jemplos sencillos de Material!as re4exiones especulares ocurren naturalmente en los objetos lisos. En general) cuanto mslisa sea una super*cie) ms de*nida e intensa es la re4exin especular. #uando una super*cie essu*cientemente lisa) act"a como un espejo +ue re4eja la luz sin cambiar el color de la luz. %or lotanto) el color especular de un objeto normalmente es blanco. #ambiamos el color specular deun Material para alterar la intensidad de una re4exin specular .por ejemplo) olor3f(4.1f54.1f5 4.1f)/. El valor de brillantez controla el rango de la extensin delngulo de la visin para elcualsepuede verunare4exin especular. >na brillantez msaltaresultaenre4exiones especularesms pe+ue9as. !a 0igura 12,H muestra nueve eseras distintas iluminadas por una uente de luz.#ada esera tiene un valor de brillantez distinto. >n objeto Material se asocia a un objeto visual a travs de un objeto (pearance de la mismamanera +ue lo (acen los atributos del aspecto. El mtodoSet+aterial()de la clase(ppearance reerencia un objeto Material para ese objeto (ppearance. 9ropiedadesGeometr0color3 #olorin&(ttributes3 0MaterialBay tres maneras de especi*car el color para un objeto visual- color por2vrtice especi*cado enla geometra con los mtodos getolor()) #olorin&(ttributes de un nodo (ppearance) y elobjeto Material. Java 3D permite +ue creemos objetos visuales sin usar ninguna) alguna) o lastres ormas de especi*car color. #uando se (a (ec(o ms de una especi*cacin del color) dos sencillas reglas determinan +uespeci*cacin del color toma la precedencia. #olorMaterialseutilizasolamentecuandolarepresentaciniluminaobjetosycolor de#olorin&(ttributesslo se utiliza cuando se renderizan objetos noiluminados. ;eometra por2vrtice siempre tiene precedencia sobre#olorin&(ttributesoMaterial. !as reglas puedenser ms claras cuandoel problemasedivideenobjetos iluminados oapagados. !a iluminacin est activa para un objeto cuando se reerencia un objeto Material.&nversamente) cuando no se asocia ning"n objeto Material al objeto visual) la iluminacin estdesactivadaparaeseobjeto. 6bserva+ueunaescenapuedetenertantoobjetosiluminadoscomo apagados. #uando la iluminacin est activa para un objeto .es decir) se reerencia un objeto Material/) seutilizan el color material o el color de la geometra por2vrtice para sombrear. 'i esta presente) elcolor por2vrtice reemplaza los colores de Material diusos y ambiente. 6bserva +ue el color de#olorin&(ttributesnunca se utiliza para la iluminacin de objetos. !a siguiente 8abla resumelas relaciones-#olor de Geometr0 por V=rtice #olor #olorin&(ttributes -esultado76 76 #olor 5aterial'& 76 #olor ;eometry76 '& #olor 5aterial'& '& #olor ;eometry#uandolailuminacinestdesactivadaparaunobjeto.esdecir) nosereerenciaunobjetoMaterial/) se usan el color de #olorin&(ttributes o el color de por2vrtice para colorear. 'i estpresente) el colordelageometrapor2vrticereemplazael colorde #olorin&(ttributes. !asiguiente 8abla resume las relaciones.#olor Geometr0 por V=rtice #olor #olorin&(ttributes -esultado76 76 blanco plano'& 76 #olor ;eometry76 '& #oloring$ttributes'& '& #olor ;eometrySuperfcies )ormales'eg"nlomencionadoenseccionesanteriores) lassuper*ciesnormalessonnecesariasparasombrear los objetos visuales. $l crear objetos visuales usando clases Geometr0) utilizamos unode los mtodos set6ormal() para especi*car los vectores de los vrtices. El)ormalGeneratorincluidoconlosutilidadesdeJava3Dgenerasuper*ciesnormalesalespeci*car los objetos visuales +ue usanobjetosGeometr0In!o. %ara generar super*ciesnormales) ponemos nuestro objeto visualGeometr0y llamamos a6ormal3enerator.generate6ormals(). !os primitivos geomtricos generan sus propias super*cies normalea cuando son especi*cados. 7o importa cmo se especi*can .o se generan/ las super*cies normales) slo se especi*ca unasuper*cienormal por vrtice. Estoconduceaalgunosproblemasinteresantes. %or ejemplo)cuando las dos super*cies normales de polgonos son visibles) la normal es solamente correctapara una de las super*cies normales. El resultado es +ue las caras posteriores sean renderizadas.si serenderizan/ solamenteconlascaractersticasmaterialesdeambiente. !asre4exionesdiusa y especular re+uieren la especi*cacin normal apropiada. Esteproblemacom"nsesolucionaespeci*candocarasnormalesdetrsal contrario+uelassuper*cies normales delanteras. >tilizamos el mtodosetBacI>ace6ormal>lip()deunobjeto 9ol0&on(ttributes para este propsito. !a 0igura 12,3 muestra dos imgenes sombreadas de una tira doblada. !a imagen de la iz+uierdauerenderizadadesdelasuper*cierontal) yladerec(amuestralas super*cies normalestraseras.#uando un vrtice es compartido por las super*cies normales o varian las orientaciones) tenersolamenteunasuper*cienormal porvrticepuededarlugaraproblemas. #onsideremoslosejemplos ilustrados en la 0igura 12,,. !a geometra ilustrada en la cara del lado iz+uierdo de la0igura 12,, muestra la seccin transversal de una super*cie donde cada polgono se orienta a unngulo de FHK de sus vecinos. 'i se selecciona la super*cie normal como el normal actual parauna super*cie) es muy incorrecto para su vecino. 'i las super*cies normales se especi*can seg"nlomostrado) entonceslasuper*cieestarsombreadaconstantementeentrelosvrticesconsuper*cies paralelas. >n problema similar ocurre con la geometra del cubo mostrada en la caraderec(a en la 0igura 12,,. !a solucin a ambos problemas es aumentar el n"mero de vrticesparaaumentar eln"merodesuper*ciesnormales.Esto) porsupuesto) aumentael uso delamemoria y el tiempo de la renderizacin. specifcar la In$uencia de las LucesEnejemplosanteriores) laespeci*cacindeloslmites+uein4uencianunobjetodeluzseconsigueal reerirseaunobjeto%ounds. Estoconectalalocalizacindelos lmites +uein4uencian a la localizacin de la luz. .En secciones anteriores se explic cmo lastransormaciones enel escenario gr*co aectanalos vol"menes delimites usados paraespeci*car los lmites de in4uencia de las luces./ 5ientras +ue esto se (ace trivial para moverluces junto con los objetos visuales +ue se iluminan) otras aplicaciones necesitan unaespeci*cacin ms 4exible de la in4uencia de luces. $ortunadamente) el $%& Java 3Dproporciona un mtodo alternativo para especi*car los lmites de in4uencia y una manera delimitar el mbito en adicin de los lmites. (lternativa a los L>mites de In$uencia? %oundin&Lea!>nobjeto%oundin&Lea!es unalternativaaunobjeto%oundsdein4uencia. >nobjeto%oundin&Lea! es reerido por otros nodos de la (oja para de*nir una regin de in4uencia. #omodescendiente de SceneGrap'Object) los ejemplares de %oundin&Lea! se agregan al escenariogr*co. El objeto %oundin&Lea! est sujeto al sistema de coordenadas local de su posicin en elescenario gr*co) +ue podra ser independiente del sistema de coordenadas del objeto de luz. Esdecir) usar un%oundin&Lea!permite a una luz y a sus lmites de in4uencia moverseindependientemente. >na llamada asetInfluencingBounding:eaf()para un objeto de luz especi*ca elargumento%oundin&Lea!como los lmites de in4uencia de la luz. Esta especi*cacinreemplaza cual+uier especi*cacin regional de los lmites de in4uencia. >n objeto%oundin&Lea! puede ser compartido por varios objetos de luz. !a 0igura 12,3 muestra el diagrama del escenario gr*co para una aplicacin de ejemplo de unobjeto %oundin&Lea!con objetos de luz. En esta escena) se mueven dos luces junto con unobjeto /rans!ormGroup.a la derec(a/. Estas luces podan ser ejemplares de 9ointLi&'to deSpotLi&'t. 'in embargo) la in4uencia de estas luces no cambia cuando las luces se mueven. !ain4uencia de las luces se mueve cuando el /rans!ormGroup iz+uierdo cambia la localizacin delobjeto %oundin&Lea!. %odemos comparar este diagrama del escenario gr*co con el +ue esten la 0igura 123H. En la 0igura 123H) si se mueve la luz) su regin de in4uencia tambin se mueve. 8ambin) seg"nlo demostrado en la 0igura 123H) la regin de in4uencia de dos luces +ue comparten el mismoobjeto%oundspueden o no pueden tener la misma regin de in4uencia. #uando dos o msluces comparten el mismo objeto%oundin&Lea!) tienen siempre la misma regin de lain4uencia. :mbito de L>mites de In$uencia de las Luces>na regin de limites) con un objeto %ounds o un objeto %oundin&Lea!) especi*ca la regin dein4uencia de un objeto de luz. >n mbito especi*cado puede adems limitar la in4uencia de unaluz a una porcin del escenario gr*co. #omo valor por deecto) todas las luces tienen el alcancedel mundo virtual en el cual reside. !a adicin de una especi*cacin del alcance reduce ademslain4uenciadeunaluzalosobjetosvisualesenel escenariogr*codebajodel&roup@sAespeci*cado. %or ejemplo) consideremos la aplicacin siguiente. jemplo de :mbito de Iluminacin!a escena consiste en una lmpara y algunos objetos visuales en una mesa. !a lmpara tieneuna sombra) por eso no todos los objetos) ni toda la mesa) debe ser iluminada por la lmpara. Elinterior .pero no el exterior/ de la lmpara tambin se debe iluminar .en este ejemplo) la sombrade la lmpara es completamente opaca/. 'abemos +ue Java 3D no proporcionar la obstruccinpor nosotros. >sando slo un volumen de limitacin) la in4uencia de la luz puede ser controlada)pero podra ser muy dicil) especialmente si se iluminan y apagan objetos +ue estn uno cercadel otro) o se mueven. Especi*car un mbito de limitaciones para la luz nos permite controlar limitaciones complejas delain4uenciamscilmente. !a"nicaconsideracinesmantener losobjetosiluminadosyapagados enpartes separadas del escenariogr*co. 7uestropensamientoinicial pudosercomenzar a construir el escenario gr*co%ranc'Groupspara los objetos iluminados yapagados) pero so no es a menudo necesario ni recomendado para la mayora de lasaplicaciones. Eldiagrama delescenario gr*co de la iz+uierda de la 0igura 12,D muestra un acercamientonativo alaconstruccin delescenario gr*co. !aorganizacin noesnaturalyserdicil demanipularenunaaplicacinanimada.%or ejemplo) sila mesasemueve)la lmpara yotrosobjetos debenmoverseconella. Enel escenario gr*co delaiz+uierda) mover lamesa.mediante la manipulacin de/rans!ormGroup/ no mover la lmpara o el rectnguloilumiando? solamente el rectngulo apagado se mover con la mesa. El diagrama del escenario gr*co de la derec(a representa una organizacin ms natural para laescena. !os objetos en la mesa son (ijos del /rans!ormGroup +ue coloca la mesa. 'i la mesa semueve .mediante la manipulacin de /rans!ormGroup/ los objetos de la mesa se moveran conella. !a escena de ejemplo se crea en Li&'tScope(pp4java. !a 0igura 12,A muestra dos imgenesrenderizadas del programa de ejemplo. !a imagen iz+uierda utiliza mbito de luz para limitar lain4uencia de la luz de la lmpara a la lmpara y el rectngulo iluminado. !a imagen derec(a noutiliza scoping? por lo tanto) la luz de la lmpara ilumina el L rectngulo no iluminadoL. El reabrillantedebajodelalmpara.norepresentadaenning"ndiagramadel escenariogr*co/ es un polgono situado justo sobre la tapa de la mesa. Este polgono brillante representala parte de la mesa +ue es iluminada por la lmpara. El rea brillante aparece ms ligera +ue elrestodelamesa.inclusoenlaimagenderec(adela0igura12F/ por+uesussuper*ciessealinean ms cercanas al punto de luz de la lmpara. !a sombra no aparece iluminada en ninguna imagen de la 0igura 12,A por+ue su caractersticaMaterial diusa es negra. !a sombra puede crearser con el uso del scoping solamente si un nodoadicional del grupo +ue se utiliza en el escenario gr*co.!a sombra en esta escena ue creada a mano. !as tcnicas para crear sombras automticamente.incluso dinmicamente/ se discuten en la siguiente seccin. 8ampocoserepresentanenning"ndiagramadel escenariogr*colas tres uentes deluzadicionales- dos uentes de luz direccionales y una uente de luz ambiente. Mstas son necesariaspara simular la luz de una escena natural. El siguiente blo+ue de reerencia muestra los mtodos de la clase Li&'t usados para especi*carlimitaciones delscoping y el uso de los objetos%oundin&Lea!para especi*car los lmites dein4uencia. !ista %arcial de 5todos de la #lases Li&'t6tros mtodos de la clase Li&'t aparecieron en secciones anteriores.void addScope(3roup scope)$9ade el mbito especi*cado a la lista de mbitos de este nodo.java.util.Enumeration get&llScopes()Devuelve un objeto Enumeration con todos los mbitos.void insertScope(3roup scope5 int index)&nserta el mbito especi*cado por el nodo grupo en el ndice especi*cado.int numScopes()Devuelve un contador con los mbitos de luces.void removeScope(int index)Elimina el mbito del nodo en la posicin de ndice especi*cada.void setInfluencingBounding:eaf(Bounding:eaf region)'elecciona la regin de in4uencia de la luz al %oundin&Lea! especi*cado. 'eleccionar un %oundin&Lea! sobreescribe un objeto %ounds.void setScope(3roup scope5 int index)'elecciona el mbito de (erencias en el ndice especi*ado. %or deecto las luces tienen mbitos slo para los lmites de su regin de in4uencia.6tra ventaja de usar alcances para limitar la in4uencia de una luz- puede reducir el tiempo derenderizado. #alcularlainterseccindeloslmitesparaunobjetovisual conloslmites+uein4uencian de una luz es ms complejo +ue determinar el alcance de una luz. Debemos tenercuidado con +ue ni el uso de los lmites de in4uencia ni los alcances limitar la in4uencia de unaluz a una parte de un objeto visual. #rear Objetos %rillantes"en"la"Oscuridad3 Sombras 0Otros 9roblemas de Iluminacin!as secciones anteriores cubren las aplicaciones tpicas de iluminacin en Java 3D. Esta seccincubre algunas de las caractersticas y tcnicas menos utilizadas.Objetos %rillantes"en"la"OscuridadEl objetoMaterialpermitelaespeci*cacin deun coloremisivo.Esto sepuedeutilizarparacrear el eecto de un objeto brillante en la oscuridad. 8ener un color emisivo no (ace del objetovisual una uente de luz? no iluminar otros objetos visuales. El Material Emisivo es tambin "tilen aplicaciones especiales) tales como indicar un objeto especial o un objeto +ue se (a escogido.!a 0igura 12,1 muestra la escena delprograma delmbito de luz donde se le (a dado coloremisivoalrectngulono iluminado.#omparemosestaimagencon laimageniz+uierda de la0igura 12,A. #omo podemos ver) el uso del color emisivo slo modi*ca al objeto visual +ue lotiene. Este ejemplo tambin demuestra +ue el uso e*caz del color emisivo) como con la mayorade los parmetros de la iluminacin) es ms un problema artstico +ue de programacin. #alcular Sombras!a complejidad de calcular sombras es tan grande +ue no orma parte de ning"n sistema degr*cos en tiempo real. !a complejidad viene de clcular si la uente de luz alcanza o no unvrtice. 8odo polgono de otro objeto visual debe ser considerado al calcular la respuesta. El sombreado es muc(o ms complejo en realidad. !as uentes de luz no son uentes puramentedireccionales ni perectas. %or lo tanto) las sombras no tienen bordes sostenidos. &gnorando larealidad) como (acemos a menudo en gr*cos) ec(emos una ojeada a las ormas de simularsombras. #rear SombrasBay dos partes bsicas al simular .o al alsi*car/ sombras- calcular donde estn las sombras) ycrear geometras.otexturas/ paraservircomosombras. Bayvariasmanerasdecalcularlalocalizacin de la sombra) pero los detalles de las distintas tcnicas de sombreado estn ms alldel alcance de esta gua. !as dos secciones siguientes cubren dos tcnicas generales para crearel contenido de la sombra. Sombrear 9ol>&onos>n polgono especi*cado sin propiedades Material se puede utilizar como polgono de sombra)llamado un polgono sombra coloreado. El color del polgono sombra) especi*cado por geometraoconunobjeto#olorin&(ttributes) seeligeparaaparecercomoel objetoensombra. !ospolgonos sombra especi*cados de esta manera pueden parecer alsos en escenas complejas. !os polgonos sombra especi*cados con las caractersticas Material pero uera de la in4uenciade uno o ms objetos de luz se llaman polgonos sombra sombreados. !os polgonos sombra sonsombreados por los objetos de luz +ue los in4uencian tal +ue parecen ms realistas.6bviamente) especi*carunpolgonosombrasombreadoesmscomplejo+ueespeci*carunpolgono sombra coloreado.7o importa cmo se especi*+ue un polgono sombra) la posicin del polgono sombra es justoarriba) o en rente de) el polgono al +ue da sombra. 5ientras +ue la adicin de polgonos sombranodalugarnormalmenteamspolgonospararenderizar.debidoalaobstruccindeotrospolgonos/ crea ms objetos en el universo virtual lo +ue puede degradar el uncionamiento de larenderizacin. En vez de crear los polgonos sombra) las sombras pueden crearse cambiando la in4uencia deluces para excluir polgonos Len la sombraL. El mbito de luces es "til para este propsito. 'inembargo) puesto +ue la in4uencia se determina en base al objeto) puede ser complejo calcularcmo subdividir los objetos visuales +ue se sombrean parcialmente. Sombrear /e;turas#omo las sombras anteriores) las sombras naturales son complejas. >na sombra naturalraramente tiene un borde recto y una sombra constante. 'e puede usar el texturado para (acersombras ms realistas. Bay dos maneras bsicas de usar texturado para crear sombras-aplicando textura a los polgonos sombra) o la aplicacin de texturas a los objetos visuales. #omoel texturadono se (acubiertotodava.#ap>tuloB/) y elclculo de lastexturas de lasombra.inclusooJ2line/ esdicil .yvamsalldel alcancedeestagua/ esteesuntemapendiente para otro libro. Mover Objetos3 Mover SombrasDebemos tener presente +ue la adicin de sombras a una aplicacin (ace la aplicacin muc(oms compleja. %or ejemplo) cuando un cubo con una sombra gira) la sombra gira y se deorma.%ara esa materia) las luces mviles (acen +ue las sombras se muevan tambin. En cual+uiercaso) el movimiento agrega otro nivel de complejidad a la programacin de sombras. 9ro&rama de jemplo de SombrasEl programaS'adow(pp4javadaunejemplodecmosepuedencrear polgonos sombrasencillos. El programa de*ne una clase para crear los polgonos sombra. !a clase sombra crea unpolgonosombraparacadageometradadacomoentradadeinormacin. El.ra&mentode#di&o 1"3muestra la claseSimpleS'adowusada para crear polgonos sombra enS'adow(pp4java. !a 0igura 12,E muestra la escena renderizada con una sombra. .ra&mento de #di&o 1"3 #lase S'adow para #rear 9ol>&onos Sombreados4%. pu$lic class SimpleS!ado" extends S!ape3D '(. SimpleS!ado"(3eometr#&rra# geom5 Aector3f direction53. olor3f col5 float !eig!t) ',.-. int vount ) geom.getAertexount()*.. Juad&rra# pol# ) ne" Juad&rra#(vount5 3eometr#&rra#.99RDI6&7ES/. @ 3eometr#&rra#.9:9R831. )*2. %4. int v*%%. Boint3f vertex ) ne" Boint3f()*%(. Boint3f s!ado" ) ne" Boint3f()*%3. for (v ) 4* v K vount* vEE) '%,. geom.getoordinate(v5 vertex)*%-. s!ado".set( vertex.x E (vertex.#D!eig!t) G direction.x5%.. !eig!t E 4.444%f5%/. vertex.< E (vertex.#D!eig!t) G direction.#)*%1. pol#.setoordinate(v5 s!ado")*%2. pol#.setolor(v5 col)*(4. 0(%.((. t!is.set3eometr#(pol#)*(3. 0@arias asunciones (ec(as en la clase SimpleS'adow .para (acerlo cil/ limitan las aplicacionesdeestaclase.SimpleS'adowestlimitadaen+ue- proyectasolamentealosplanos) sloconsidera una luz) slo (ace algunas orientaciones) no considera las dimensiones del plano sobreel +ue se est proyectando. Escribir una clase de *nes generales para el clculo de la sombra esuna empresa importante. /pico (van7ado? l 9apel del Objeto View en elSombreado!a vista .o las vistas/ asociadas a un escenario gr*co juegan una gran variedad de papeles encmo se renderiza una escena. Esta seccin no explica todos los papeles delobjeto View. !aespeci*cacin del $%& Java 3D proporciona una reerencia completa a la claseView. Esta seccinmencionasolamentedosmtodosdelaclaseView"tilesparaentender el sombreadodeobjetos visuales. 'eg"n lo mencionado en la seccin I@ectores de ojo local contra ojos in*nitoI) el vector del ojo esconstante como valor por deecto. Esto se conoce como un vector de ojo in*nito. Es decir) laescena se renderiza como si uera vista desde el in*nito. 8ener un ojo in*nito reduceperceptiblemente el clculo de renderizacin. 'inembargo) laimagen+ueresultapuedeparecer incorrecta. !a0igura12,Fmuestralasimgenesrenderizadasapartir deunaescenausandounojoin*nitoyunojolocal usandodiversas uentes de luz. %ara apreciar completamente las imgenes de la 0igura 12,F necesitamos conocer la geometradelaescena. !aescenasonnueveeseras enunaorganizacinplanar. #adaunadelasimgenes se ve con el mismo campo visual desde la misma posicin. !as "nicas variables son sila luz es un DirectionalLi&'t o un 9ointLi&'t) y si el ojo es in*nito o local. El DirectionalLi&'ttiene direccin .H) H) 23/) el 9ointLi&'t se coloca en .H) H) 3/. !as imgenes .a/ y .c/ de la 0igura 12,F se renderizan con un ojo in*nito. En estas imgenes) losvectoresdelojo sonconstantes)as +uelasre4exiones especulares estnbsicamenteen lamisma posicin para cada esera. !as imgenes .b/ y .d/ de la 0igura 12,F se renderizan con unojolocal. !osvectoresdel ojovaranenestasimgenes) as +uelasre4exionesespecularesestn en distinta posicin para cada esera. 6bservemos tambin +ue la re4exin diusa .azul/en las eseras vara slo con la uente de luz. El vector del ojo slo desempe9a un papel en elclculo de la re4exin especular. >na vez ms la caracterstica de la visin del ojo in*nito se utiliza para reducir el clculo) y por lotanto el tiempo de la renderizacin. !a imagen .a/ de la 0igura 12,F tarda un menor tiempo pararenderizarse y la imagen .d/ tarda el mayor tiempo. !as imgenes .b/ y .c/ tardan una cantidadcasi igual de tiempo) +ue es menor +ue el tiempo de la imagen .d/) pero mayor +ue el de laimagen .a/. El tiempo real para renderizar vara con el sistema utilizado. !a dierencia es mspronunciada en los sistemas +ue renderizan por sot=are. !ista %arcial de 5todos .:elacionados con el 'ombreado/ de la #lase ViewEl objeto View contiene todos los parmetros necesarios para rendereizar una escena tridimensional desde un punto de vista.void set:ocalE#e:ig!tingEna$le($oolean flag)'elecciona una bandera +ue india si se usa el ojo local para calacular las proyecciones de perspectivas.void set=indo"E#epointBolic#(int polic#)'elecciona la poltica del modelo de vista de ojo de la ventana a uno de - :E!$8&@EN86N0&E!DN60N@&EO) :E!$8&@EN86N'#:EE7) :E!$8&@EN86NO&7D6OEl objeto View se puede conseguir desde un Simple,niverse usando los mtodos apropiados.Entonces el objeto View se puede manipular como en el siguiente ejemplo- Simple?niverse su ) ne" Simple?niverse(canvas)*su.getAie"er().getAie"().set:ocalE#e:ig!tingEna$le(true)*