<?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_APIMoverModelos3D</id>
	<title>LIBGDX APIMoverModelos3D - 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_APIMoverModelos3D"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;action=history"/>
	<updated>2026-10-17T07:13:42Z</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_APIMoverModelos3D&amp;diff=644&amp;oldid=prev</id>
		<title>Wiki: /* Movendo os Modelos 3D */</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;diff=644&amp;oldid=prev"/>
		<updated>2016-01-05T20:53:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Movendo os Modelos 3D&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 20:53 5 ene 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l45&quot; &gt;Línea 45:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 45:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Traslación e escala:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Traslación e escala:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#setToTranslationAndScaling-float-float-float-float-float-float- public Matrix4 setToTranslationAndScaling(float translationX,float translationY,float translationZ,float scalingX,float scalingY,float scalingZ)]: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Rota &lt;/del&gt;e escala á vez. Carga a matriz de identidade e aplica a &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;rotación &lt;/del&gt;e escala nos eixes indicados cun valor de 1.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#setToTranslationAndScaling-float-float-float-float-float-float- public Matrix4 setToTranslationAndScaling(float translationX,float translationY,float translationZ,float scalingX,float scalingY,float scalingZ)]: &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Traslada &lt;/ins&gt;e escala á vez. Carga a matriz de identidade e aplica a &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;traslación &lt;/ins&gt;e escala nos eixes indicados cun valor de 1.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;diff=638&amp;oldid=prev</id>
		<title>Wiki: /* Movendo os Modelos 3D */</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;diff=638&amp;oldid=prev"/>
		<updated>2016-01-03T17:32:32Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Movendo os Modelos 3D&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 17:32 3 ene 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l157&quot; &gt;Línea 157:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 157:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		// TODO Auto-generated method stub&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		// TODO Auto-generated method stub&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;setFieldOfView(&lt;/del&gt;67&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;)&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;fieldOfView=&lt;/ins&gt;67;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;		camara3d&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;viewportWidth&lt;/del&gt;=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;width&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;                camara3D&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;viewportHeight&lt;/ins&gt;=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;height&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;		camara3d&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;viewportHeight&lt;/del&gt;=&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;height&lt;/del&gt;;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;                camara3D&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;viewportWidth&lt;/ins&gt;=&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;width&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		Gdx.input.setInputProcessor(camController);&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		Gdx.input.setInputProcessor(camController);&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;diff=637&amp;oldid=prev</id>
		<title>Wiki: /* Movendo os Modelos 3D */</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;diff=637&amp;oldid=prev"/>
		<updated>2016-01-03T17:24:19Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Movendo os Modelos 3D&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;es&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Revisión anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revisión del 17:24 3 ene 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l157&quot; &gt;Línea 157:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 157:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		// TODO Auto-generated method stub&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		// TODO Auto-generated method stub&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;fieldOfView=&lt;/del&gt;67;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;setFieldOfView(&lt;/ins&gt;67&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;)&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.viewportWidth=width;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.viewportWidth=width;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.viewportHeight=height;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		camara3d.viewportHeight=height;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Wiki</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;diff=621&amp;oldid=prev</id>
		<title>Wiki: Página creada con «&lt;span style=&quot;font-size:150%;&quot;&gt;UNIDADE 5: Mover modelos 3D&lt;/span&gt;    ===Introdución===  Neste apartado imos ver como mover os modelos 3D cargados coa clase ModelInstance, f...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_APIMoverModelos3D&amp;diff=621&amp;oldid=prev"/>
		<updated>2015-12-17T17:43:49Z</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: Mover modelos 3D&amp;lt;/span&amp;gt;    ===Introdución===  Neste apartado imos ver como mover os modelos 3D cargados coa clase ModelInstance, f...»&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: Mover modelos 3D&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Introdución===&lt;br /&gt;
&lt;br /&gt;
Neste apartado imos ver como mover os modelos 3D cargados coa clase ModelInstance, facendo uso das matrices.&lt;br /&gt;
&lt;br /&gt;
Para mover os modelos só temos que aplicar o aprendido [http://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Animacions3D#Animando_o_cubo:_translaci.C3.B3n.2C_rotaci.C3.B3n_e_escalado na Unidade 4].&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;
&lt;br /&gt;
Creamos unha nova clase de nome EX_3_MoverModelos que sexa chamada pola clase PracticasNovaApi3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Movendo os Modelos 3D===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A matriz de modelado-vista se atopa na [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g3d/ModelInstance.html#transform propiedade transform] do  ModelInstance, e este a su vez está asociado a un Model.&lt;br /&gt;
&lt;br /&gt;
Clase utilizada: [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html Matrix4].&lt;br /&gt;
&lt;br /&gt;
Operacións (todas elas sobrecargadas) sobre a &amp;#039;&amp;#039;&amp;#039;propiedade transform&amp;#039;&amp;#039;&amp;#039; do ModelInstance:&lt;br /&gt;
&lt;br /&gt;
* Traslación: &lt;br /&gt;
&lt;br /&gt;
::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#setToTranslation-float-float-float- public Matrix4 setToTranslation(float x,float y, float z)]: Carga a matriz identidade e posiciona o obxecto nas coordenadas indicadas. &amp;#039;&amp;#039;&amp;#039;Esta sería a forma que deberíamos utilizar se seguimos o esquema Modelo-Vista-Controlador&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
 &lt;br /&gt;
::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#setTranslation-float-float-float- public Matrix4 setTranslation(float x,float y, float z)]: Posiciona o obxecto nas coordenadas indicadas. Non carga a matriz identidade.&lt;br /&gt;
&lt;br /&gt;
* Rotación:&lt;br /&gt;
&lt;br /&gt;
::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#setToRotation-com.badlogic.gdx.math.Vector3-float- public Matrix4 setToRotation(Vector3 axis, float degrees)]: Carga a matriz de identidade e rota a matriz no ángulo indicado en grados e no eixe que teña o valor 1.&lt;br /&gt;
&lt;br /&gt;
::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#rotate-float-float-float-float- public Matrix4 rotate(float axisX,float axisY,float axisZ,float degrees)]: Rota a matriz no ángulo indicado en grados e no eixe que teña o valor 1.&lt;br /&gt;
&lt;br /&gt;
* Escala:&lt;br /&gt;
&lt;br /&gt;
::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#setTranslation-float-float-float- public Matrix4 setToScaling(Vector3 vector)]: &amp;lt;u&amp;gt;Carga a matriz identidade&amp;lt;/u&amp;gt; e escala a matriz no valor indicado no eixe correspondente.&lt;br /&gt;
&lt;br /&gt;
:&amp;#039;&amp;#039;&amp;#039;&amp;lt;u&amp;gt;Atención:&amp;lt;/u&amp;gt;&amp;#039;&amp;#039;&amp;#039;: Se usamos este método estaremos perdendo a información gardada na matriz de modelado. Para aplicar unha traslación e escala teremos que aplicar o método seguinte:&lt;br /&gt;
&lt;br /&gt;
* Traslación e escala:&lt;br /&gt;
&lt;br /&gt;
::[http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Matrix4.html#setToTranslationAndScaling-float-float-float-float-float-float- public Matrix4 setToTranslationAndScaling(float translationX,float translationY,float translationZ,float scalingX,float scalingY,float scalingZ)]: Rota e escala á vez. Carga a matriz de identidade e aplica a rotación e escala nos eixes indicados cun valor de 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Imos facer un exemplo.&lt;br /&gt;
&lt;br /&gt;
Seguindo co exercicio anterior (o podedes gardar facendo copy e paste sobre o propio arquivo en Eclipse).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase EX_3_MoverModelos&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 varios modelos e animalos. Operacións de escala, rotacion e traslación.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;51-52,54-64,78-80,82,85-86,90-91&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.assets.AssetManager;&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.g3d.Environment;&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.utils.Array;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class EX_3_MoverModelos implements Screen {&lt;br /&gt;
&lt;br /&gt;
	private PerspectiveCamera camara3d;&lt;br /&gt;
	private  ModelBatch modelBatch;&lt;br /&gt;
&lt;br /&gt;
	private Array&amp;lt;ModelInstance&amp;gt; instances;&lt;br /&gt;
	private ModelInstance instanceNave;&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	private Environment environment;&lt;br /&gt;
	private CameraInputController camController;&lt;br /&gt;
	&lt;br /&gt;
	private float pos;&lt;br /&gt;
		&lt;br /&gt;
	public EX_3_MoverModelos(){&lt;br /&gt;
		camara3d = new PerspectiveCamera();&lt;br /&gt;
		camController = new CameraInputController(camara3d);&lt;br /&gt;
		Gdx.input.setInputProcessor(camController);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch = new ModelBatch();&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;
        instances = new Array&amp;lt;ModelInstance&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
        AssetManager assets = new AssetManager();&lt;br /&gt;
        assets.load(&amp;quot;ship.obj&amp;quot;, Model.class);&lt;br /&gt;
        assets.load(&amp;quot;cube.g3db&amp;quot;, Model.class);&lt;br /&gt;
        assets.finishLoading();&lt;br /&gt;
        &lt;br /&gt;
        Model modelNave = assets.get(&amp;quot;ship.obj&amp;quot;, Model.class);&lt;br /&gt;
        Model modelCubo = assets.get(&amp;quot;cube.g3db&amp;quot;, Model.class);&lt;br /&gt;
&lt;br /&gt;
        instanceNave = new ModelInstance(modelNave);&lt;br /&gt;
        instanceNave.transform.setToRotation(0, 1, 0, 90);&lt;br /&gt;
        &lt;br /&gt;
        for (int cont=1; cont &amp;lt; 10;cont++){&lt;br /&gt;
        	ModelInstance cubo = new ModelInstance(modelCubo);&lt;br /&gt;
        	if (cont&amp;gt;3 &amp;amp;&amp;amp; cont&amp;lt;6){&lt;br /&gt;
        		cubo.transform.setToTranslationAndScaling(cont*3, 0, 0, 0.5f, 0.5f, 0.5f);&lt;br /&gt;
        	}&lt;br /&gt;
        	else&lt;br /&gt;
        		cubo.transform.setTranslation(cont*3,0,0);&lt;br /&gt;
        	&lt;br /&gt;
            instances.add(cubo);&lt;br /&gt;
     &lt;br /&gt;
        }&lt;br /&gt;
&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;
		camController.update();&lt;br /&gt;
		&lt;br /&gt;
		pos+=delta * 1f;&lt;br /&gt;
	&lt;br /&gt;
		for (ModelInstance modelI : instances){&lt;br /&gt;
			modelI.transform.rotate(0,1,0,delta*30f);	// Continua a rotación, non empeza de 0&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		instanceNave.transform.setTranslation(pos,0,0);&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
		camara3d.lookAt(pos,0,0);&lt;br /&gt;
		camara3d.update();&lt;br /&gt;
		&lt;br /&gt;
        modelBatch.begin(camara3d);&lt;br /&gt;
&lt;br /&gt;
        modelBatch.render(instances,environment);&lt;br /&gt;
        modelBatch.render(instanceNave,environment);&lt;br /&gt;
        &lt;br /&gt;
        modelBatch.end();	&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;
		Gdx.input.setInputProcessor(camController);&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;
	@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;
		modelBatch.dispose();&lt;br /&gt;
		instances.clear();&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;
Comentemos o código:&lt;br /&gt;
&lt;br /&gt;
* Liñas 51-52: Creamos un ModelInstance a partires do Model da nave e rotamos no eixe Y 90 grados a nave, para poñela cara os cubos.&lt;br /&gt;
* Liñas 54-62: Creamos o array de ModelInstance. Os trasladamos chamando ó método setTranslate e dous deles (os números 4 e 5) ademais de trasladalos os escalamos á metade do seu tamaño orixinal.&lt;br /&gt;
* Liñas 78-80: Rotamos todos os cubos. Como xa están trasladados, a rotación é no punto onde se atopan (como o movemento de rotación da Terra). Chamamos a translate e non a setToTranslate xa que este último inicializa a matriz e polo tanto movería todos os cubos á posición (0,0,0).&lt;br /&gt;
* Liña 82: Movemos a nave.&lt;br /&gt;
* Liñas 85-86: Facemos que a cámara siga á nave.&lt;br /&gt;
* Liñas 90-91: Renderizamos os ModelInstace dos bloques (array) e a nave.&lt;br /&gt;
&lt;br /&gt;
Ó final teremos como resultado isto:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD5_CargaModelos3D_3.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
===Modelo-Vista-Controlador: Movendo os Modelos 3D===&lt;br /&gt;
&lt;br /&gt;
Imos modificar o exercicio anterior para que siga a arquitectura Modelo-Vista.&lt;br /&gt;
&lt;br /&gt;
O controlador xa o sabedes implementar das unidades referidas o xogo 2D polo que por motivos de &amp;#039;rapidez&amp;#039; non o imos utilizar neste exemplo.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
* Crear unha nova clase de nome EX_4_MoverModelosMVC.&lt;br /&gt;
* Cambiade a clase PracticasNovaApi3D para que chame á nova clase.&lt;br /&gt;
&lt;br /&gt;
Empecemos creando os modelos:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase Elemento3D&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; Crear o Modelo. Saltamos o paso de crear a clase Mundo para facelo máis sinxelo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;35-38&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.math.Matrix4;&lt;br /&gt;
import com.badlogic.gdx.math.Vector3;&lt;br /&gt;
&lt;br /&gt;
public class Elemento3D {&lt;br /&gt;
	public Matrix4 matriz;&lt;br /&gt;
	public Vector3 posicion;&lt;br /&gt;
	public float escala;&lt;br /&gt;
	public Vector3 velocidade;&lt;br /&gt;
	public Vector3 rotacion;&lt;br /&gt;
&lt;br /&gt;
	public float anguloRotacion;&lt;br /&gt;
	private int velocidadeRotacion;&lt;br /&gt;
	&lt;br /&gt;
	private Vector3 temp;&lt;br /&gt;
	&lt;br /&gt;
	public Elemento3D(Vector3 pos, float escala,Vector3 velocidade, Vector3 rotacion,int velocidadeRotacion){&lt;br /&gt;
		matriz = new Matrix4();&lt;br /&gt;
		posicion = pos;&lt;br /&gt;
		this.escala=escala;&lt;br /&gt;
		this.velocidade = velocidade;&lt;br /&gt;
		this.rotacion=rotacion;&lt;br /&gt;
		anguloRotacion=0;&lt;br /&gt;
		this.velocidadeRotacion=velocidadeRotacion;&lt;br /&gt;
		&lt;br /&gt;
		temp = new Vector3();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	public void update(float delta){&lt;br /&gt;
		&lt;br /&gt;
		temp.set(velocidade);&lt;br /&gt;
		posicion.add(temp.scl(delta));&lt;br /&gt;
		anguloRotacion+=delta*velocidadeRotacion;&lt;br /&gt;
&lt;br /&gt;
		matriz.idt();&lt;br /&gt;
		matriz.translate(posicion);&lt;br /&gt;
		matriz.scl(escala);&lt;br /&gt;
		matriz.rotate(rotacion, anguloRotacion);&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;
Como vemos o máis importante a ter en conta é que imos gardar nesta clase a Matriz de modelado que vai usarse para representar a figura.&lt;br /&gt;
Fixarse como sempre partimos da matriz de identidade e aplicamos a traslación, escala e rotación (liñas 35-38).&lt;br /&gt;
* Liñas 24-25: Agora xa non necesitamos un array de ModelInstances. Imos gardar un único ModelInstance por cada tipo de elemento gráfico (unha nave e un bloque).&lt;br /&gt;
* Liñas 27-28: Gardamos en obxectos da clase Elemento3D os datos de cada figura.&lt;br /&gt;
* Liñas 44-53: Facemos o mesmo que no exercicio anterior (os mesmos datos) pero esta vez son gardados en obxectos que pertencen á clase Elementos3D.&lt;br /&gt;
* Liña 76: A cámara mira cara a posición da nave.&lt;br /&gt;
* Liñas 81-86: &amp;#039;&amp;#039;&amp;#039;Moi importante:&amp;#039;&amp;#039;&amp;#039; Actualizamos a MATRIZ de cada bloque e asinamos ó ModelInstance a matriz gardada.&lt;br /&gt;
* Liñas 88-92: Movemos a nave e a rotamos para que estea cara os bloques. Actualizamos a matriz e asinamos ó ModelInstance da nave a matriz gardada.&lt;br /&gt;
* Liña 145: Limpamos o array del bloques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase EX_4_MoverModelosMVC&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; Facemos o mesmo exercicio anterior pero utilizando a matriz gardada na clase Elemento3D.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;24-25,27-28,44-53,76,81-86,88-92,145&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.assets.AssetManager;&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.g3d.Environment;&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.math.Vector3;&lt;br /&gt;
import com.badlogic.gdx.utils.Array;&lt;br /&gt;
import com.plategaxogo3davanzado.angel.Elemento3D;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
public class EX_4_MoverModelosMVC implements Screen {&lt;br /&gt;
&lt;br /&gt;
	private PerspectiveCamera camara3d;&lt;br /&gt;
	private  ModelBatch modelBatch;&lt;br /&gt;
&lt;br /&gt;
	private ModelInstance instanceNave;&lt;br /&gt;
	private ModelInstance instanceBloques;&lt;br /&gt;
	&lt;br /&gt;
	private Array&amp;lt;Elemento3D&amp;gt;bloques;&lt;br /&gt;
	private Elemento3D nave;&lt;br /&gt;
	&lt;br /&gt;
	private Environment environment;&lt;br /&gt;
	private CameraInputController camController;&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
	public EX_4_MoverModelosMVC(){&lt;br /&gt;
		camara3d = new PerspectiveCamera();&lt;br /&gt;
		camController = new CameraInputController(camara3d);&lt;br /&gt;
		Gdx.input.setInputProcessor(camController);&lt;br /&gt;
		&lt;br /&gt;
		modelBatch = new ModelBatch();&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;
                bloques = new Array&amp;lt;Elemento3D&amp;gt;();&lt;br /&gt;
                for (int cont=1; cont &amp;lt; 10;cont++){&lt;br /&gt;
          	   if (cont&amp;gt;3 &amp;amp;&amp;amp; cont&amp;lt;6){&lt;br /&gt;
        		bloques.add(new Elemento3D(new Vector3(3*cont, 0, 0),0.5f,new Vector3(0,0,0),new Vector3(1,1,1),30));&lt;br /&gt;
        	   }&lt;br /&gt;
        	   else&lt;br /&gt;
        		bloques.add(new Elemento3D(new Vector3(3*cont, 0, 0),1f,new Vector3(0,0,0),new Vector3(1,1,1),50));&lt;br /&gt;
                }&lt;br /&gt;
        &lt;br /&gt;
                nave = new Elemento3D(new Vector3(0,0,0), 1, new Vector3(1f, 0, 0),new Vector3(0,0,0),0);&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
&lt;br /&gt;
                AssetManager assets = new AssetManager();&lt;br /&gt;
                assets.load(&amp;quot;ship.obj&amp;quot;, Model.class);&lt;br /&gt;
                assets.load(&amp;quot;cube.g3db&amp;quot;, Model.class);&lt;br /&gt;
                assets.finishLoading();&lt;br /&gt;
        &lt;br /&gt;
                Model modelNave = assets.get(&amp;quot;ship.obj&amp;quot;, Model.class);&lt;br /&gt;
                Model modelCubo = assets.get(&amp;quot;cube.g3db&amp;quot;, Model.class);&lt;br /&gt;
&lt;br /&gt;
                instanceBloques = new ModelInstance(modelCubo);&lt;br /&gt;
                instanceNave = new ModelInstance(modelNave);&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;
		camController.update();&lt;br /&gt;
		&lt;br /&gt;
		camara3d.lookAt(nave.posicion);&lt;br /&gt;
		camara3d.update();&lt;br /&gt;
		&lt;br /&gt;
        modelBatch.begin(camara3d);&lt;br /&gt;
&lt;br /&gt;
        for (Elemento3D bloque : bloques){&lt;br /&gt;
        	bloque.update(delta);&lt;br /&gt;
        	instanceBloques.transform.set(bloque.matriz);&lt;br /&gt;
            modelBatch.render(instanceBloques,environment);&lt;br /&gt;
        	&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        nave.posicion.x += nave.velocidade.x*delta;&lt;br /&gt;
        nave.update(delta);&lt;br /&gt;
        nave.matriz.rotate(0, 1,0,90);&lt;br /&gt;
        instanceNave.transform.set(nave.matriz);&lt;br /&gt;
        modelBatch.render(instanceNave,environment);&lt;br /&gt;
        &lt;br /&gt;
        modelBatch.end();	&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;
		Gdx.input.setInputProcessor(camController);&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;
	@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;
		modelBatch.dispose();&lt;br /&gt;
		bloques.clear();&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;
Vexamos as diferenzas:&lt;br /&gt;
&lt;br /&gt;
* Liñas 24-25: Agora xa non necesitamos un array de ModelInstances. Imos gardar un único ModelInstance por cada tipo de elemento gráfico (unha nave e un bloque).&lt;br /&gt;
* Liñas 27-28: Gardamos en obxectos da clase Elemento3D os datos de cada figura.&lt;br /&gt;
* Liñas 44-53: Facemos o mesmo que no exercicio anterior (os mesmos datos) pero esta vez son gardados en obxectos que pertencen á clase Elementos3D.&lt;br /&gt;
* Liña 76: A cámara mira cara a posición da nave.&lt;br /&gt;
* Liñas 81-86: &amp;#039;&amp;#039;&amp;#039;Moi importante:&amp;#039;&amp;#039;&amp;#039; Actualizamos a MATRIZ de cada bloque e asinamos ó ModelInstance a matriz gardada.&lt;br /&gt;
* Liñas 88-92: Movemos a nave e a rotamos para que estea cara os bloques. Actualizamos a matriz e asinamos ó ModelInstance da nave a matriz gardada.&lt;br /&gt;
* Liña 145: Limpamos o array del bloques.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Se executades o código o resultado é o mesmo que no caso anterior.&lt;br /&gt;
&lt;br /&gt;
Por eficiencia pode ser mellor ter un array de ModelInstances e renderizalos todos de vez.&lt;br /&gt;
Isto o podemos facer igual pero teríamos que asinar a cada elemento do array de ModelInstace a matriz gardada no array de Elementos3D.&lt;br /&gt;
&lt;br /&gt;
No blog de Xoppa tedes unha entrada no que amosa como podemos cargar todos os modelos de vez dun só acceso á disco: http://blog.xoppa.com/loading-a-scene-with-libgdx/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&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>