<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_ModelBuilder</id>
	<title>LIBGDX ModelBuilder - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.cifprodolfoucha.es/index.php?action=history&amp;feed=atom&amp;title=LIBGDX_ModelBuilder"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_ModelBuilder&amp;action=history"/>
	<updated>2026-10-17T01:31:09Z</updated>
	<subtitle>Historial de revisiones de esta página en el wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_ModelBuilder&amp;diff=612&amp;oldid=prev</id>
		<title>Wiki: Página creada con «&lt;span style=&quot;font-size:150%;&quot;&gt;UNIDADE 5: ModelBuilder. Primeiros modelos 3D&lt;/span&gt;   ===Introdución===  A [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_ModelBuilder&amp;diff=612&amp;oldid=prev"/>
		<updated>2015-12-17T17:37:21Z</updated>

		<summary type="html">&lt;p&gt;Página creada con «&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;UNIDADE 5: ModelBuilder. Primeiros modelos 3D&amp;lt;/span&amp;gt;   ===Introdución===  A [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span style=&amp;quot;font-size:150%;&amp;quot;&amp;gt;UNIDADE 5: ModelBuilder. Primeiros modelos 3D&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introdución===&lt;br /&gt;
&lt;br /&gt;
A [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/utils/ModelBuilder.html clase ModelBuilder] vainos permitir crear modelos en execución (por programación).&lt;br /&gt;
&lt;br /&gt;
Como novidade con respecto ó dado na Unidade 4 imos engadir o uso de luces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
Empezamos co primeiro exercicio.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Creade unha nova clase que implemente a interface Screen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase EX_1_DefinicionLuz&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Cargar o noso primeiro modelo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.Screen;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.PerspectiveCamera;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class EX_1_DefinicionLuz implements Screen {&lt;br /&gt;
&lt;br /&gt;
	private PerspectiveCamera camara3d;&lt;br /&gt;
	&lt;br /&gt;
	public EX_1_DefinicionLuzInicial(){&lt;br /&gt;
		camara3d = new PerspectiveCamera();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
		 &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resize(int width, int height) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
		camara3d.fieldOfView=67;&lt;br /&gt;
		camara3d.viewportWidth=width;&lt;br /&gt;
		camara3d.viewportHeight=height;&lt;br /&gt;
		&lt;br /&gt;
		camara3d.position.set(0f,0f,15f);&lt;br /&gt;
		camara3d.lookAt(0,0,0);&lt;br /&gt;
		camara3d.near=1;&lt;br /&gt;
		camara3d.far=300f;&lt;br /&gt;
		camara3d.update();&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void show() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void hide() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void pause() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resume() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como vemos nesta clase só definimos unha cámara en perspectiva como xa fixemos anteriormente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase PracticasNovaApi3D&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Chamamos á clase anterior&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.Game;&lt;br /&gt;
import com.plategaxogo3davanzado.pantallas.EX_1_DefinicionLuzInicial;&lt;br /&gt;
&lt;br /&gt;
public class PracticasNovaApi3D extends Game {&lt;br /&gt;
&lt;br /&gt;
	private EX_1_DefinicionLuz pantallaxogo;&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void create() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
		pantallaxogo = new EX_1_DefinicionLuz();&lt;br /&gt;
		setScreen(pantallaxogo);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose(){&lt;br /&gt;
		super.dispose();&lt;br /&gt;
		pantallaxogo.dispose();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Modificade ás clases principais das diferentes plataformas para que chamen a esta clase.&lt;br /&gt;
&lt;br /&gt;
A partires de aquí todos os exercicios levarán consigo a creación dunha clase que implemente a interface Screen e será necesario modificar a clase PracticasNovaApi3D para que chame ó novo exercicio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===ModelBuilder===&lt;br /&gt;
&lt;br /&gt;
O obxectivo deste punto vai consistir en xerar unha figura xeométrica por programación e asinarlle unha cor, textura e unha luz á escena&lt;br /&gt;
&lt;br /&gt;
[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/utils/ModelBuilder.html Clase ModelBuilder].&lt;br /&gt;
Información relacionada na wiki: https://github.com/libgdx/libgdx/wiki/Material-and-environment&lt;br /&gt;
&lt;br /&gt;
O proceso é o seguinte:&lt;br /&gt;
&lt;br /&gt;
* Instanciamos un obxecto da clase ModelBuilder:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
ModelBuilder modelBuilder = new ModelBuilder();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Chamamos ó método createXXXXX indicando o tipo de figura que queremos crear.&lt;br /&gt;
&lt;br /&gt;
Pero....non todo vai ser tan fácil :)&lt;br /&gt;
&lt;br /&gt;
Cando creamos unha figura temos que asinarlle un material (ven así no constructor). &lt;br /&gt;
E para que serve un material ?&lt;br /&gt;
&lt;br /&gt;
Os materiais están relacionados coa luz e como se reflexa nela. Dependendo do tipo de material a luz pode reflectirse dunha forma ou outra.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Tedes [http://math.hws.edu/eck/cs424/notes2013/09_Light_and_Material.html neste enlace] máis información sobre o uso de Materiais e Luces.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por exemplo, neste caso imos crear un cilindro:&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	private Model modelCilindro;&lt;br /&gt;
&lt;br /&gt;
        ............&lt;br /&gt;
        modelCilindro = modelBuilder.createCylinder(5f,5f, 10f, 10, 	    		&lt;br /&gt;
	    		new Material(ColorAttribute.createDiffuse(Color.RED)),&lt;br /&gt;
	    		Usage.Position | Usage.Normal);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Como xa vimos [http://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Figuras_3D_Mesh anteriormente], cando creamos unha figura sempre temos que enviarlle a lo menos á posición. Iso o indicamos có atributo Usage.position. O outro atributo, Ussage.Normal fai referencia a que calcule os vectores que son asociados á figura e que van indicar cara onde se vai a reflectir a luz (normal vector).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Podedes crear un cubo ou outras figuras para facer probas.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Tedes máis información [http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-13-normal-mapping/ neste enlace] sobre os Vector Normal.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Neste caso estamos a definir un cilindro de dimensións alto=5,ancho=5,profundo=5 e 10 divisións, que veñen a ser o número de partes en que está dividido o cilindro (a mais partes máis &amp;#039;calidade&amp;#039; visual do cilindro).&lt;br /&gt;
Ademais o estamos pintando de vermello.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; Débese liberar a memoria do modelo chamando ó método dispose.&lt;br /&gt;
&lt;br /&gt;
Agora ben, có Model non indicamos onde ten que colocarse o figura.&lt;br /&gt;
Para iso temos que crear unha instancia da [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/ModelInstance.html clase ModelInstance].&lt;br /&gt;
&lt;br /&gt;
* Creamos por tanto unha instancia da clase ModelInstance, pasando como parámetro o obxecto da clase Model.&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	private ModelInstance modeloInstanciaCilindro;&lt;br /&gt;
&lt;br /&gt;
        ............&lt;br /&gt;
	public EX_1_DefinicionLuzInicial(){&lt;br /&gt;
                modeloInstanciaCilindro = new ModelInstance(modelCilindro);&lt;br /&gt;
                .....&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt;Por defecto os obxectos son posicionados na posición (0,0,0).&lt;br /&gt;
&lt;br /&gt;
* Agora necesitamos renderizar o modelo. Para facelo debemos facer uso da [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/ModelBatch.html clase ModelBatch], chamando ó método render e pasándolle como argumento o ModelInstance:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	private ModelBatch modelBatch;&lt;br /&gt;
&lt;br /&gt;
        .....&lt;br /&gt;
	public EX_1_DefinicionLuzInicial(){&lt;br /&gt;
                modelBatch = new ModelBatch();&lt;br /&gt;
                .....&lt;br /&gt;
        }&lt;br /&gt;
        .....&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
		 &lt;br /&gt;
		modelBatch.begin(camara3d);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.render(modeloInstanciaCilindro);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.end();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
O código completo:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase EX_1_DefinicionLuzInicial&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Visualiza un cilindro utilizando a clase ModelBuilder.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.Screen;&lt;br /&gt;
import com.badlogic.gdx.graphics.Color;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.PerspectiveCamera;&lt;br /&gt;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.Material;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.Model;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.ModelBatch;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.ModelInstance;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class EX_1_DefinicionLuzInicial implements Screen {&lt;br /&gt;
&lt;br /&gt;
	private PerspectiveCamera camara3d;&lt;br /&gt;
	private Model modelCilindro;&lt;br /&gt;
	private ModelInstance modeloInstanciaCilindro;&lt;br /&gt;
	private ModelBatch modelBatch;&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	public EX_1_DefinicionLuzInicial(){&lt;br /&gt;
		camara3d = new PerspectiveCamera();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        ModelBuilder modelBuilder = new ModelBuilder();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        modelCilindro = modelBuilder.createCylinder(5f,5f, 10f, 10, 	    		&lt;br /&gt;
	    		new Material(ColorAttribute.createDiffuse(Color.RED)),&lt;br /&gt;
	    		Usage.Position | Usage.Normal);&lt;br /&gt;
        &lt;br /&gt;
        modeloInstanciaCilindro = new ModelInstance(modelCilindro);&lt;br /&gt;
        modelBatch = new ModelBatch();&lt;br /&gt;
        &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
		 &lt;br /&gt;
		modelBatch.begin(camara3d);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.render(modeloInstanciaCilindro);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.end();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resize(int width, int height) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
		camara3d.fieldOfView=67;&lt;br /&gt;
		camara3d.viewportWidth=width;&lt;br /&gt;
		camara3d.viewportHeight=height;&lt;br /&gt;
		&lt;br /&gt;
		camara3d.position.set(0f,0f,15f);&lt;br /&gt;
		camara3d.lookAt(0,0,0);&lt;br /&gt;
		camara3d.near=1;&lt;br /&gt;
		camara3d.far=300f;&lt;br /&gt;
		camara3d.update();&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void show() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void hide() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void pause() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resume() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		modelCilindro.dispose();&lt;br /&gt;
		modelBatch.dispose();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Resultado:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Imagen:LIBGDX_UD5_ModelBuilder_1.jpg | 400px|center]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Non é moi espectacular o resultado verdade ? :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Para facelo un pouco máis bonito (con texturas mellora a cousa) imos darlle un pouco de luz.&lt;br /&gt;
&lt;br /&gt;
===Luces===&lt;br /&gt;
&lt;br /&gt;
* Máis información: http://sjbaker.org/steve/omniv/opengl_lighting.html&lt;br /&gt;
&lt;br /&gt;
Existen diferentes tipos de fontes de luz:&lt;br /&gt;
&lt;br /&gt;
* Luces de ambiente (ambient lights): Non é un tipo de luz direccional (que veña dun sitio concreto) pero fai que todos os obxectos se iluminen por igual.&lt;br /&gt;
* Puntos de luz (point lights): A luz parte dun punto no espazo e todas as direccións (coma unha bombilla).&lt;br /&gt;
* Luces direccionais (directional lights): A luz ven dunha dirección. Por exemplo o Sol (aínda que non sexa realmente así). A súa luz &amp;#039;golpea&amp;#039; toda a superficie da Terra no mesmo ángulo pola distancia tan grande que hai.&lt;br /&gt;
* Spotlights: Parecidas ós puntos de luz pero cunha dirección formando un cono de luz, como por exemplo a luz dun farol da rúa.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A maiores da posición e dirección da luz, OPEN GL nos permite definir a intensidade da mesma. Esta é expresada en forma de cor RGBA, e especifica catro tipos diferentes de cor (intensidade) da mesma:&lt;br /&gt;
&lt;br /&gt;
* Ambiente (ambient): A luz é uniforme en todo o obxecto.&lt;br /&gt;
* Difusa (diffuse): As caras do obxectos que non son iluminadas aparecen máis escuras.&lt;br /&gt;
* Especular (specular): Parecida á difusa pero só afecta a certos puntos que teñen unha determinada orientación entre a luz e o obxecto.&lt;br /&gt;
* Emisiva (emissive): Non se utiliza.&lt;br /&gt;
&lt;br /&gt;
Como comentario, indicar que os materias poden ter a mesma cor/intensidade que os tipos indicados anteriormente.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unha vez vista a teoría imos coa práctica.&lt;br /&gt;
&lt;br /&gt;
Imos engadir á nosa escena unha luz ambiente e unha luz direccional.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Nota:&amp;lt;/u&amp;gt; As luces consumen bastantes recursos polo que non se debe abusar delas.&lt;br /&gt;
&lt;br /&gt;
Para facer uso das luces debemos usar a [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/Environment.html clase Environment].&lt;br /&gt;
&lt;br /&gt;
O proceso é o seguinte:&lt;br /&gt;
&lt;br /&gt;
* Instanciamos un obxecto de dita clase:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
	private Environment environment;&lt;br /&gt;
         .............&lt;br /&gt;
	public EX_1_DefinicionLuzInicial(){&lt;br /&gt;
         .............&lt;br /&gt;
        environment = new Environment();&lt;br /&gt;
&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Definimos os dous tipos de luz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
        environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));&lt;br /&gt;
        environment.add(new DirectionalLight().set(1f, 1f, 1f, 1f, 0f, 0f));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Renderizamos enviando o environment creado:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;7&amp;quot; &amp;gt;&lt;br /&gt;
	public void render(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
		 &lt;br /&gt;
		modelBatch.begin(camara3d);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.render(modeloInstanciaCilindro,environment);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.end();&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Como vemos na definición do tipo de luz, a luz ambiente xa está creada. Cambiamos a súa intensidade e non leva posición (ven de todos lados).&lt;br /&gt;
A luz direccional a engadimos:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
        environment.add(new DirectionalLight().set(1f, 1f, 1f, 1f, 0f, 0f));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Indicamos a súa cor/intensidade(RGBA) e posición.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Resultado:&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Imagen:LIBGDX_UD5_ModelBuilder_2.jpg | 400px|center]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Controlando a escena===&lt;br /&gt;
&lt;br /&gt;
[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/utils/CameraInputController.html Clase CameraInputController].&lt;br /&gt;
&lt;br /&gt;
Para &amp;#039;xogar&amp;#039; un pouco coa escena imos a engadir un control da cámara co rato, de tal forma que poderemos rotar a cámara e afastala coa roda do rato.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase EX_1_DefinicionLuz&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Poder mover a cámara premendo co rato o botón esquerdo e movendo o rato ó mesmo tempo. Coa roda achegamos ou afastamos a cámara.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;26,46-47&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.Screen;&lt;br /&gt;
import com.badlogic.gdx.graphics.Color;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.PerspectiveCamera;&lt;br /&gt;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.Environment;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.Material;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.Model;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.ModelBatch;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.ModelInstance;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.attributes.ColorAttribute;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.environment.DirectionalLight;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;&lt;br /&gt;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class EX_1_DefinicionLuz implements Screen {&lt;br /&gt;
&lt;br /&gt;
	private PerspectiveCamera camara3d;&lt;br /&gt;
	private Model modelCilindro;&lt;br /&gt;
	private ModelInstance modeloInstanciaCilindro;&lt;br /&gt;
	private ModelBatch modelBatch;&lt;br /&gt;
	private Environment environment;&lt;br /&gt;
&lt;br /&gt;
	private CameraInputController camController;&lt;br /&gt;
	&lt;br /&gt;
	public EX_1_DefinicionLuzInicial(){&lt;br /&gt;
		camara3d = new PerspectiveCamera();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        ModelBuilder modelBuilder = new ModelBuilder();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        modelCilindro = modelBuilder.createCylinder(5f,5f, 10f, 10, 	    		&lt;br /&gt;
	    		new Material(ColorAttribute.createDiffuse(Color.RED)),&lt;br /&gt;
	    		Usage.Position | Usage.Normal);&lt;br /&gt;
        &lt;br /&gt;
        modeloInstanciaCilindro = new ModelInstance(modelCilindro);&lt;br /&gt;
        modelBatch = new ModelBatch();&lt;br /&gt;
        &lt;br /&gt;
        environment = new Environment();&lt;br /&gt;
        environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));&lt;br /&gt;
        environment.add(new DirectionalLight().set(1f, 1f, 1f, 1f, 0f, 0f));&lt;br /&gt;
        &lt;br /&gt;
		camController = new CameraInputController(camara3d);&lt;br /&gt;
		Gdx.input.setInputProcessor(camController);&lt;br /&gt;
        &lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render(float delta) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
		 &lt;br /&gt;
		modelBatch.begin(camara3d);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.render(modeloInstanciaCilindro,environment);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch.end();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resize(int width, int height) {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
		camara3d.fieldOfView=67;&lt;br /&gt;
		camara3d.viewportWidth=width;&lt;br /&gt;
		camara3d.viewportHeight=height;&lt;br /&gt;
		&lt;br /&gt;
		camara3d.position.set(0f,0f,15f);&lt;br /&gt;
		camara3d.lookAt(0,0,0);&lt;br /&gt;
		camara3d.near=1;&lt;br /&gt;
		camara3d.far=300f;&lt;br /&gt;
		camara3d.update();&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void show() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void hide() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void pause() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void resume() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose() {&lt;br /&gt;
		// TODO Auto-generated method stub&lt;br /&gt;
		modelCilindro.dispose();&lt;br /&gt;
		modelBatch.dispose();&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] -- (2015).&lt;/div&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
</feed>