<?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_Figuras_3D_Mesh</id>
	<title>LIBGDX Figuras 3D Mesh - 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_Figuras_3D_Mesh"/>
	<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Figuras_3D_Mesh&amp;action=history"/>
	<updated>2026-10-17T22:08:24Z</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_Figuras_3D_Mesh&amp;diff=572&amp;oldid=prev</id>
		<title>Wiki en 14:17 14 dic 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Figuras_3D_Mesh&amp;diff=572&amp;oldid=prev"/>
		<updated>2015-12-14T14:17:41Z</updated>

		<summary type="html">&lt;p&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 14:17 14 dic 2015&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-l37&quot; &gt;Línea 37:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 37:&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;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;&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; Debedes crear un novo proxecto &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(ou utilizar un xa feito como base, tal como xa explicamos no [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Creacion_dun_proxecto_base seguinte enlace])&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;&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; Debedes crear un novo proxecto.&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;div&gt;Crear unha clase de nome UD4_1_Triangulos3D, que derive da clase Game e sexa chamada pola clase principal das diferentes versións (desktop, android,...).&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;Crear unha clase de nome UD4_1_Triangulos3D, que derive da clase Game e sexa chamada pola clase principal das diferentes versións (desktop, android,...).&lt;/div&gt;&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-l181&quot; &gt;Línea 181:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 181:&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;Analicemos agora o código:&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;Analicemos agora o código:&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;*Liña 4: Indicamos a cor que queremos que teñan por defecto cada un dos puntos que se envían á GPU no formato (RGBA). Xa visto [http://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;manuais&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;iessanclemente&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;net&lt;/del&gt;/index.php?title=LIBGDX_Os_graficos#As_cores neste enlace].&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;*Liña 4: Indicamos a cor que queremos que teñan por defecto cada un dos puntos que se envían á GPU no formato (RGBA). Xa visto [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;wiki&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cifprodolfoucha&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;es&lt;/ins&gt;/index.php?title=LIBGDX_Os_graficos#As_cores neste enlace].&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;*Liña 5: Esta liña borra o buffer onde se garda a información de cada punto que se vai enviar á GPU.&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;*Liña 5: Esta liña borra o buffer onde se garda a información de cada punto que se vai enviar á GPU.&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;*Liñas 6 e 8: Todo que se queira enviar á GPU aplicándolle o ShaderProgram definido terá que estar ente o begin - end.&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;*Liñas 6 e 8: Todo que se queira enviar á GPU aplicándolle o ShaderProgram definido terá que estar ente o begin - end.&lt;/div&gt;&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-l379&quot; &gt;Línea 379:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Línea 379:&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;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;&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; Deberemos copiar o arquivo seguinte ó cartafol assets do proxecto Android. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Se &lt;/del&gt;o proxecto está xerado coa [http://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;manuais&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;iessanclemente&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;net&lt;/del&gt;/index.php?title=LIBGDX_Instalaci%C3%B3n_do_framework_LIBGDX&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;#Xeraci&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;C3.B3n_dos_proxectos ferramenta de Libgdx&lt;/del&gt;] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;xa deberedes ter este gráfico.&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;&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; Deberemos copiar o arquivo seguinte ó cartafol assets do proxecto Android. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Xa deberedes ter este gráfico se &lt;/ins&gt;o proxecto está xerado coa [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;wiki&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cifprodolfoucha&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;es&lt;/ins&gt;/index.php?title=LIBGDX_Instalaci%C3%B3n_do_framework_LIBGDX &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ferramenta gdx-setup&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;jar&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;/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;div&gt;[[Imagen:Badlogic.jpg|300px|center]]&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;[[Imagen:Badlogic.jpg|300px|center]]&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;Unha textura é unha imaxe que imos &amp;#039;pegar&amp;#039; sobre un gráfico. Xa traballamos [http://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;manuais&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;iessanclemente&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;net&lt;/del&gt;/index.php?title=LIBGDX_Os_graficos#Carga_de_gr.C3.A1ficos_c.C3.B3_framework_LIBGDX coas texturas no xogo 2D].&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;Unha textura é unha imaxe que imos &amp;#039;pegar&amp;#039; sobre un gráfico. Xa traballamos [http://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;wiki&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;cifprodolfoucha&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;es&lt;/ins&gt;/index.php?title=LIBGDX_Os_graficos#Carga_de_gr.C3.A1ficos_c.C3.B3_framework_LIBGDX coas texturas no xogo 2D].&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;div&gt;Imaxinade que tedes unha parede e un cartel. O cartel é a textura e a parede a unha parte da figura en 3D (Mesh).  &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;Imaxinade que tedes unha parede e un cartel. O cartel é a textura e a parede a unha parte da figura en 3D (Mesh).  &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_Figuras_3D_Mesh&amp;diff=560&amp;oldid=prev</id>
		<title>Wiki: Página creada con «&lt;span style=&quot;font-size:150%;&quot;&gt;UNIDADE 4: Figuras 3D. Mesh&lt;/span&gt;  ==Introducion==  No espazo en tres dimensións (no que nos movemos) os obxectos están definidos por tres...»</title>
		<link rel="alternate" type="text/html" href="https://wiki.cifprodolfoucha.es/index.php?title=LIBGDX_Figuras_3D_Mesh&amp;diff=560&amp;oldid=prev"/>
		<updated>2015-12-14T14:08:41Z</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 4: Figuras 3D. Mesh&amp;lt;/span&amp;gt;  ==Introducion==  No espazo en tres dimensións (no que nos movemos) os obxectos están definidos por tres...»&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 4: Figuras 3D. Mesh&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introducion==&lt;br /&gt;
&lt;br /&gt;
No espazo en tres dimensións (no que nos movemos) os obxectos están definidos por tres dimensións espaciais (eixes X, Y, Z). Ata o de agora estabamos a visualizar gráficos que estaban definidos nos eixes x-y de tal forma que non tiñan profundidade (eixe z).&lt;br /&gt;
&lt;br /&gt;
A clase que nos permite definir os puntos que conforman as figuras no espazo tridimensional denomínase [http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Mesh.html Mesh].&lt;br /&gt;
&lt;br /&gt;
Pero todo non vai ser tan sinxelo como isto...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Shader Program==&lt;br /&gt;
&lt;br /&gt;
Resulta que a partires da versión OPEN GL 2.0 os gráficos renderízanse utilizando Shader´s.&lt;br /&gt;
Os [http://www.opengl.org/wiki/Shader Shader] son programas escritos en linguaxe parecida a C que se denomina  GLSL e que permiten modificar as propiedades dos puntos que se van renderizar podendo facer efectos moi complexos.&lt;br /&gt;
&lt;br /&gt;
O proceso de aplicar un Shader Program a unha figura se divide en dúas etapas:&lt;br /&gt;
&lt;br /&gt;
* Vertex Shader: aplícanse operacións a cada un dos vértices da figura. Por exemplo, poderíamos modificar a posición e tamaño dun obxecto 3D.&lt;br /&gt;
* Fragment Shader: é a segunda etapa. A diferenza coa anterior é que se vai aplicar a cada fragmento da figura. Por simplificar imos identificar fragmento como pixel. Como podedes pensar o custe de GPU será maior que no caso anterior, por lo que non se debe abusar deste mecanismo. Por exemplo, poderíamos cambiar a cor de cada pixel da figura.&lt;br /&gt;
&lt;br /&gt;
Un exemplo do que se pode facer cós Shader: https://www.youtube.com/watch?v=JkyGTZ0992s&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por que esta explicación...?&lt;br /&gt;
&lt;br /&gt;
Porque cando no seguinte punto expliquemos como renderizar unha figura sinxela coma un triángulo, teremos que engadirlle un Shader Program. Loxicamente non tedes que aprender nada del, pero si é interesante que saibades porque aparece. É obrigatorio xa que estamos a utilizar OPEN GL ES 2.0. &lt;br /&gt;
&lt;br /&gt;
O Shader Program que imos utilizar non vai facer ningunha modificación, só vai copiar a posición e a cor que traian cada un dos puntos da figura a debuxar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Máis información en:&lt;br /&gt;
* Información dos ShaderProgram: https://github.com/libgdx/libgdx/wiki/Shaders#a-simple-shaderprogram&lt;br /&gt;
* Shader: http://www.opengl.org/wiki/Shader&lt;br /&gt;
&lt;br /&gt;
==Definindo unha figura en 3D. A clase Mesh==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; Debedes crear un novo proxecto (ou utilizar un xa feito como base, tal como xa explicamos no [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Creacion_dun_proxecto_base seguinte enlace]).&lt;br /&gt;
&lt;br /&gt;
Crear unha clase de nome UD4_1_Triangulos3D, que derive da clase Game e sexa chamada pola clase principal das diferentes versións (desktop, android,...).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Posición===&lt;br /&gt;
O primeiro que imos facer vai ser definir un triángulo cun obxecto da clase Mesh. O Mesh vainos permitir representar unha figura xeométrica en tres dimensións.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase UD4_1_Triangulos3D&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; Definir un triángulo en 3D.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;4,15,46-50&amp;quot; &amp;gt;&lt;br /&gt;
import com.badlogic.gdx.Game;&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.Mesh;&lt;br /&gt;
import com.badlogic.gdx.graphics.VertexAttribute;&lt;br /&gt;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Traballos coa clase Mesh para definir un triángulo en 3D&lt;br /&gt;
 * @author ANGEL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class UD4_1_Triangulos3D extends Game {&lt;br /&gt;
&lt;br /&gt;
	private Mesh triangulo1; // Definimos un obxecto pertencente á clase Mesh&lt;br /&gt;
	private ShaderProgram shaderProgram;&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;
&lt;br /&gt;
		// Creamos o ShaderProgram ===&amp;gt; NON NECESARIO MIRALO&lt;br /&gt;
		String vertexShader = &amp;quot;attribute vec4 a_position; 	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color;                \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;void main()				\n&amp;quot; &lt;br /&gt;
                                + &amp;quot;{                                    \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;	gl_Position = a_position;	\n&amp;quot;  &lt;br /&gt;
				+&amp;quot;}				        \n&amp;quot;;&lt;br /&gt;
		String fragmentShader = &amp;quot;#ifdef  GL_ES 		\n&amp;quot;&lt;br /&gt;
				+     &amp;quot;precision mediump float;	\n&amp;quot;&lt;br /&gt;
                                + &amp;quot;#endif 			\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color;\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot;void main()		        \n&amp;quot; &lt;br /&gt;
                                + &amp;quot;{				\n&amp;quot;&lt;br /&gt;
                                + &amp;quot;   gl_FragColor = vec4(0,0,0,1); \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;}				\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		// Creamos o ShaderProgram en base ós programas definidos anteriormente&lt;br /&gt;
		shaderProgram = new ShaderProgram(vertexShader, fragmentShader);&lt;br /&gt;
		if (shaderProgram.isCompiled() == false) {&lt;br /&gt;
			Gdx.app.log(&amp;quot;ShaderError&amp;quot;, shaderProgram.getLog());&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		triangulo1 = new Mesh(true, 3, 3, VertexAttribute.Position());&lt;br /&gt;
		triangulo1.setVertices(new float[] { -0.5f, -0.5f, 0, &lt;br /&gt;
						  0.5f, -0.5f, 0, &lt;br /&gt;
						  0, 0.5f, 0 });&lt;br /&gt;
		triangulo1.setIndices(new short[] { 0, 1, 2 });&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Analicemos o constructur empregado na creación do obxecto Mesh:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
		triangulo1 = new Mesh(true, 3, 3, VertexAttribute.Position());&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 1º parámetro (true): indicámoslle se é de clase ou non. Este parámetro é usado internamente por motivos de &amp;#039;eficiencia&amp;#039; e se aplica á función glBufferData de OpenGL e normalmente sempre poñeremos true excepto no caso de usar animacións no que o mesh varía en cada frame (http://stackoverflow.com/questions/5402567/whats-glbufferdata-for-inopengl-es).&lt;br /&gt;
* 2º parámetro: é o número de vértices que ten a figura (no noso caso 3, un triángulo).&lt;br /&gt;
* 3º parámetro: é o número de índices. Os índices van a indicar en que orden se deben unir as liñas entre os vértices. No noso caso son tres índices.&lt;br /&gt;
* 4º parámetro: indicamos que información imos a enviarlle o mesh (pode ser a posición, a cor, a textura,...). No noso caso pasámoslle a posición dos vértices que conforman o triángulo no espazo x,y,z.. Cada vértice terá tres números (as coordenadas x,y,z)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A continuación indicamos as coordenadas x,y,z do noso triángulo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt; Cabe sinalar que a cámara, por defecto, se sitúa na posición (0,0,0)&lt;br /&gt;
mirando cara a coordenada z negativa. É dicir, se a vosa cabeza é a cámara, os vosos ollos están a mirar agora mesmo cara ó monitor. Esa liña é o eixe Z que se vai afastando con valores Z negativos.&lt;br /&gt;
&lt;br /&gt;
Definimos por tanto a posición dos vértices do triángulo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
triangulo1.setVertices(new float[] { -0.5f, -0.5f, 0,&lt;br /&gt;
                                      0.5f, -0.5f, 0,&lt;br /&gt;
                                      0, 0.5f, 0 });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Por defecto a cámara vai visualizar a seguinte área:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_1.jpg | 300px | center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Polo tanto o triángulo estará nesta posición:&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_2.jpg | 300px | center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt; A coordenada Z sempre é 0 xa que estamos a debuxar un triángulo &amp;#039;plano&amp;#039;, non unha pirámide.&lt;br /&gt;
&lt;br /&gt;
A forma en como a cámara interpreta o signo positivo ou negativo das coordenadas x,y,z é o que se coñece como regra da man dereita:&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_3.jpg | 300px | center]]&lt;br /&gt;
&amp;lt;center&amp;gt;Neste gráfico os eixes indican a dirección dos valores positivos. O dedo medio apuntaría cara o teu corpo.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cando definimos unha cámara, por defecto, mira cara ao z negativo (ven ser coma nos mirando cara o monitor, a nosa cabeza estaría situada na coordenada z=0 e o monitor nun z cun valor negativo). Por detrás da nosa cabeza o z aumenta. O X e Y serán igual ca sempre: X positivo cara a dereita e negativo cara á esquerda e Y positivo cara arriba e negativo cara abaixo.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_4.jpg | 500px | center]]&lt;br /&gt;
&amp;lt;center&amp;gt;[http://www.elai.upm.es/webantigua/spain/Asignaturas/InfoInd/teoria/Apuntes%20de%20OpenGL.pdf Imaxe obtida dos apuntes de Cristina Cañero Morales]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Seguimos co exemplo do triángulo:&lt;br /&gt;
&lt;br /&gt;
O seguinte é indicarlle a orde que ten que seguir polos vértices para debuxar a figura. Os vértices empezan a numerarse polo 0.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
triangulo1.setIndices(new short[] { 0, 1, 2 });&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No noso caso non importaría a orden xa que sempre debuxamos un triángulo:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_5.jpg | 400px | center]]&lt;br /&gt;
&lt;br /&gt;
Agora temos que sobreescribir o método render para debuxar o triangulo1.&lt;br /&gt;
Para facelo imos utilizar a versión de OpenGL ES 2.0.&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;
	@Override&lt;br /&gt;
	public void render() {&lt;br /&gt;
&lt;br /&gt;
		Gdx.gl20.glClearColor(1f, 1f, 1f, 1f);&lt;br /&gt;
		Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
		shaderProgram.begin();&lt;br /&gt;
		triangulo1.render(shaderProgram, GL20.GL_TRIANGLES,0,3);&lt;br /&gt;
		shaderProgram.end();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Analicemos agora o código:&lt;br /&gt;
&lt;br /&gt;
*Liña 4: Indicamos a cor que queremos que teñan por defecto cada un dos puntos que se envían á GPU no formato (RGBA). Xa visto [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Os_graficos#As_cores neste enlace].&lt;br /&gt;
*Liña 5: Esta liña borra o buffer onde se garda a información de cada punto que se vai enviar á GPU.&lt;br /&gt;
*Liñas 6 e 8: Todo que se queira enviar á GPU aplicándolle o ShaderProgram definido terá que estar ente o begin - end.&lt;br /&gt;
*Liña 7: Indicamos que queremos renderizar o Mesh. Parámetros:&lt;br /&gt;
:: shaderProgram: Aplica o Shader Program definido.&lt;br /&gt;
::GL20.GL_TRIANGLES: Imos utilizar triángulos (os cadrados se poden forman con dous&lt;br /&gt;
triángulos).&lt;br /&gt;
::Valor 0: O terceiro parámetro indica o desprazamento dentro do buffer de vértices. Normalmente poñeremos 0 (é o array onde están definidos os vértices).&lt;br /&gt;
::Valor 3: O carto parámetro indica o nº de índices ou vértices a utilizar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finalmente liberaremos a memoria.&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;
	@Override&lt;br /&gt;
	public void dispose(){&lt;br /&gt;
		shaderProgram.dispose();&lt;br /&gt;
		triangulo1.dispose();&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase UD4_1_Triangulos3D&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; Visualizar unha figura 3D usando a clase Mesh.&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;
package com.plategaxogo3d.exemplos;&lt;br /&gt;
&lt;br /&gt;
import com.badlogic.gdx.Game;&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.Mesh;&lt;br /&gt;
import com.badlogic.gdx.graphics.VertexAttribute;&lt;br /&gt;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Traballos coa clase Mesh para definir un triángulo en 3D&lt;br /&gt;
 * @author ANGEL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class UD4_1_Triangulos3D extends Game {&lt;br /&gt;
&lt;br /&gt;
	private Mesh triangulo1; // Definimos un obxecto pertencente á clase Mesh&lt;br /&gt;
	private ShaderProgram shaderProgram;&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;
		// create shader program&lt;br /&gt;
		String vertexShader = &amp;quot;attribute vec4 a_position; 	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color; 		\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;	gl_Position = a_position;	\n&amp;quot;  &lt;br /&gt;
				+&amp;quot;}								\n&amp;quot;;&lt;br /&gt;
		String fragmentShader = &amp;quot;#ifdef GL_ES 	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;precision mediump float;		\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;#endif						\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color;		\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
                                + &amp;quot;   gl_FragColor = vec4(0,0,0,1); \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;}							\n&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		// Creamos o ShaderProgram en base ós programas definidos anteriormente&lt;br /&gt;
		shaderProgram = new ShaderProgram(vertexShader, fragmentShader);&lt;br /&gt;
		if (shaderProgram.isCompiled() == false) {&lt;br /&gt;
			Gdx.app.log(&amp;quot;ShaderError&amp;quot;, shaderProgram.getLog());&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		triangulo1 = new Mesh(true, 3, 3, VertexAttribute.Position());&lt;br /&gt;
		triangulo1.setVertices(new float[] { -0.5f, -0.5f, 0, &lt;br /&gt;
						  0.5f, -0.5f, 0, &lt;br /&gt;
					          0, 0.5f, 0 });&lt;br /&gt;
		triangulo1.setIndices(new short[] { 0, 1, 2 });&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render() {&lt;br /&gt;
&lt;br /&gt;
		Gdx.gl20.glClearColor(1f, 1f, 1f, 1f);&lt;br /&gt;
		Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
		shaderProgram.begin();&lt;br /&gt;
		triangulo1.render(shaderProgram, GL20.GL_TRIANGLES,0,3);&lt;br /&gt;
		shaderProgram.end();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose(){&lt;br /&gt;
		shaderProgram.dispose();&lt;br /&gt;
		triangulo1.dispose();&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;
===Cor===&lt;br /&gt;
&lt;br /&gt;
Agora imos modificar a clase Mesh para indicarlle que imos a enviar información acerca da cor que van ter cada un dos vértices da figura Mesh.&lt;br /&gt;
&lt;br /&gt;
Para facelo imos ter que modificar o ShaderProgram para que lle pase a cada &amp;#039;fragmento&amp;#039; a cor definida na clase Mesh.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Código da clase &amp;#039;&amp;#039;&amp;#039;UD4_1_Triangulos3D&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Obxectivo:&amp;#039;&amp;#039;&amp;#039; Definir unha cor en cada vértice da figura 3D. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;7,8,12,20,31-35,42&amp;quot; &amp;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;
		// create shader program&lt;br /&gt;
		String vertexShader = &amp;quot;attribute vec4 a_position; 	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;attribute vec4 a_color; 		\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color; 		\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;	gl_Position = a_position;	\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot; v_color = a_color; \n&amp;quot; 	&lt;br /&gt;
				+&amp;quot;}								\n&amp;quot;;&lt;br /&gt;
		String fragmentShader = &amp;quot;#ifdef GL_ES 	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;precision mediump float;		\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;#endif						\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color;		\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;	gl_FragColor = v_color;	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;}							\n&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		// Creamos o ShaderProgram en base ós programas definidos anteriormente&lt;br /&gt;
		shaderProgram = new ShaderProgram(vertexShader, fragmentShader);&lt;br /&gt;
		if (shaderProgram.isCompiled() == false) {&lt;br /&gt;
			Gdx.app.log(&amp;quot;ShaderError&amp;quot;, shaderProgram.getLog());&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
	&lt;br /&gt;
		// CON COR&lt;br /&gt;
		triangulo1 = new Mesh(false, 3, 3, VertexAttribute.Position(), &lt;br /&gt;
                                                   VertexAttribute.ColorUnpacked());&lt;br /&gt;
		triangulo1.setVertices(new float[] {-0.5f, -0.5f, 0, 1, 0, 0, 1, &lt;br /&gt;
						 0.5f, -0.5f, 0, 1, 0, 0, 1,  &lt;br /&gt;
						 0, 0.5f, 0, 1, 0, 0, 1});&lt;br /&gt;
		triangulo1.setIndices(new short[] { 0, 1, 2 });&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render() {&lt;br /&gt;
&lt;br /&gt;
		Gdx.gl20.glClearColor(0f, 0f, 0f, 1f);&lt;br /&gt;
		Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
		shaderProgram.begin();&lt;br /&gt;
		triangulo1.render(shaderProgram, GL20.GL_TRIANGLES,0,3);&lt;br /&gt;
		shaderProgram.end();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Analicemos o código:&lt;br /&gt;
&lt;br /&gt;
* Liña 7: Esta variable recibe a cor que ven do Mesh (definido en cada un dos vértices).&lt;br /&gt;
* Liña 8: Como o dato da cor temos que pasalo ao FragmentProgram utilizamos unha variable de tipo variant.&lt;br /&gt;
* Liñas 12 e 20: modificamos o Shader Program para que amose a cor definida no mesh.&lt;br /&gt;
* Liñas 31-32: indicamos que o mesh terá como atributos a posición e a cor. Cada cor está definida por catro número no formato RGBA cun float de valor 0 a 1.&lt;br /&gt;
* Liñas 33-35: indicamos a posición e cor de cada vértice do triángulo. Poñemos como cor a cor vermella (1,0,0,0).&lt;br /&gt;
* Liña 42: Modificamos a cor de fondo polo negro para que se vexa mellor.&lt;br /&gt;
&lt;br /&gt;
Se executades o programa teremos como resultado o seguinte:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_6.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&amp;lt;b&amp;gt;Nota:&amp;lt;/b&amp;gt;&amp;lt;/u&amp;gt; O parámetro alfa indica o nivel de transparencia que pode ir dende 0 (transparente) a 1 (opaco). &lt;br /&gt;
&lt;br /&gt;
Cada cor está asociada a cada un dos vértices.&lt;br /&gt;
Se poñemos valores diferentes en cada vértice fai un varrido de cor dende un valor a outro.&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;
		triangulo1.setVertices(new float[] {-0.5f, -0.5f, 0, 1, 0, 0, 1, &lt;br /&gt;
						 0.5f, -0.5f, 0, 0, 0, 1, 1,  &lt;br /&gt;
						 0, 0.5f, 0, 0, 1, 0, 1});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_7.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
===Texturas===&lt;br /&gt;
&lt;br /&gt;
Información sobre o manexo de texturas:&lt;br /&gt;
* https://github.com/mattdesl/lwjgl-basics/wiki/ShaderLesson1&lt;br /&gt;
* https://github.com/mattdesl/lwjgl-basics/wiki/LibGDX-Meshes-Lesson-1&lt;br /&gt;
* http://ogldev.atspace.co.uk/www/tutorial16/tutorial16.html&lt;br /&gt;
&lt;br /&gt;
* https://github.com/mattdesl/lwjgl-basics/wiki&lt;br /&gt;
* https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/MeshShaderTest.java&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Preparación:&amp;#039;&amp;#039;&amp;#039; Deberemos copiar o arquivo seguinte ó cartafol assets do proxecto Android. Se o proxecto está xerado coa [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Instalaci%C3%B3n_do_framework_LIBGDX#Xeraci.C3.B3n_dos_proxectos ferramenta de Libgdx] xa deberedes ter este gráfico.&lt;br /&gt;
&lt;br /&gt;
[[Imagen:Badlogic.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
Unha textura é unha imaxe que imos &amp;#039;pegar&amp;#039; sobre un gráfico. Xa traballamos [http://manuais.iessanclemente.net/index.php?title=LIBGDX_Os_graficos#Carga_de_gr.C3.A1ficos_c.C3.B3_framework_LIBGDX coas texturas no xogo 2D].&lt;br /&gt;
&lt;br /&gt;
Imaxinade que tedes unha parede e un cartel. O cartel é a textura e a parede a unha parte da figura en 3D (Mesh). &lt;br /&gt;
&lt;br /&gt;
Normalmente as texturas teñen formas cadradas ou rectangulares. Xa veremos como &amp;#039;adaptamos&amp;#039; esas formas ás formas dun modelo 3D...&lt;br /&gt;
&lt;br /&gt;
Cando falamos de texturas, as unidades nas que se miden denomínanse &amp;#039;&amp;#039;&amp;#039;U&amp;#039;&amp;#039;&amp;#039; e &amp;#039;&amp;#039;&amp;#039;V&amp;#039;&amp;#039;&amp;#039;, que serían ó equivalente ás coordenadas X / Y.&lt;br /&gt;
Ditas coordenadas U / V teñen uns valores que se moven entre 0 e 1, como amosamos na seguinte figura:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_8.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
Se queremos que dita textura se debuxe sobre un triángulo, temos que indicar as coordenadas na que se ten que debuxar a parte da textura que queiramos:&lt;br /&gt;
&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_9.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
No noso caso serían as &amp;#039;&amp;#039;&amp;#039;coordenadas da textura (0,1) – (1,1) – (0.5f,0)&amp;#039;&amp;#039;&amp;#039; que irán en cada vértice do triángulo.&lt;br /&gt;
&lt;br /&gt;
Fixarse como parte da textura vaise perder xa que a textura ten unha forma cadrada. Xa veremos máis adiante como podemos formar un cadrado con dous triángulos e desa forma a textura vai cadrar cua figura do Mesh.&lt;br /&gt;
&lt;br /&gt;
A nivel de código, teremos que facer as seguintes modificacións:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Modificamos o Shader Program:&amp;#039;&amp;#039;&amp;#039;&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;
		String vertexShader = &amp;quot;attribute vec4 &amp;quot;+ ShaderProgram.POSITION_ATTRIBUTE +&amp;quot;;\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;attribute vec4 &amp;quot; + ShaderProgram.COLOR_ATTRIBUTE +&amp;quot;;	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;attribute vec2 &amp;quot; + ShaderProgram.TEXCOORD_ATTRIBUTE + &amp;quot;0;\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color; 		\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec2 v_textCoord; 		\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;	gl_Position = &amp;quot; + ShaderProgram.POSITION_ATTRIBUTE +&amp;quot;;\n&amp;quot;&lt;br /&gt;
				+ &amp;quot; v_color = &amp;quot; + ShaderProgram.COLOR_ATTRIBUTE +&amp;quot;;\n&amp;quot; 	&lt;br /&gt;
				+ &amp;quot; v_textCoord = &amp;quot; + ShaderProgram.TEXCOORD_ATTRIBUTE+ &amp;quot;0;	\n&amp;quot;&lt;br /&gt;
				+&amp;quot;}								\n&amp;quot;;&lt;br /&gt;
		String fragmentShader = &amp;quot;#ifdef GL_ES 	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;precision mediump float;		\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;#endif						\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color;		\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot;varying vec2 v_textCoord;	\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot;uniform sampler2D u_texture; \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
				+ &amp;quot; vec4 texColor = texture2D(u_texture, v_textCoord); \n&amp;quot;&lt;br /&gt;
				+ &amp;quot; gl_FragColor = texColor*v_color; \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;}							\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Non vos preocupedes se non entendedes esta parte, xa falaremos dos Shader´s no seguinte punto. Igual que no caso das cores, temos que recoller as coordenadas das texturas (que veremos a continuación) e pasalas ó fragmentShader. Dende aquí accederemos á textura a visualizar para que cada punto se debuxe con dita textura.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Agora modificamos a definición do Mesh para indicarlle que imos a enviarlle as coordenadas da textura:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
triangulo1 = new Mesh(false, 3, 3, VertexAttribute.Position(),&lt;br /&gt;
                      VertexAttribute.ColorUnpacked(),VertexAttribute.TexCoords(0));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;E agora pasamos os datos do Mesh:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
		triangulo1.setVertices(new float[] {-0.5f, -0.5f, 0, 1, 0, 0, 1, 0, 1, &lt;br /&gt;
						 0.5f, -0.5f, 0, 0, 0, 1, 1, 1, 1,  &lt;br /&gt;
						 0, 0.5f, 0, 0, 1, 0, 1, 0.5f,0});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Lembrar que os datos da textura son os dous últimos. Estamos a indicar onde debería ir cada vértice do triángulo na textura.&lt;br /&gt;
      &lt;br /&gt;
*VÉRTICE 1: X=&amp;gt; -0.5f,Y=&amp;gt;-0.5f,Z=&amp;gt;0,RED=&amp;gt;1,GREEN=&amp;gt;0,BLUE=&amp;gt;0,ALFA=&amp;gt;1,&amp;#039;&amp;#039;&amp;#039;TEXTURA_U=&amp;gt;0,TEXTURA_V=&amp;gt;1&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
*VÉRTICE 2: X=&amp;gt; 0.5f,Y=&amp;gt;-0.5f,Z=&amp;gt;0,RED=&amp;gt;0,GREEN=&amp;gt;0,BLUE=&amp;gt;1,ALFA=&amp;gt;1,&amp;#039;&amp;#039;&amp;#039;TEXTURA_U=&amp;gt;1,TEXTURA_V=&amp;gt;1&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
*VÉRTICE 3: X=&amp;gt; 0,Y=&amp;gt;0.5f,Z=&amp;gt;0,RED=&amp;gt;0,GREEN=&amp;gt;1,BLUE=&amp;gt;0,ALFA=&amp;gt;1,&amp;#039;&amp;#039;&amp;#039;TEXTURA_U=&amp;gt;0.5f,TEXTURA_V=&amp;gt;0&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agora temos que cargar a textura. Isto xa o fixemos no xogo 2D. Poderíamos utilizar a clase AssetManager.&lt;br /&gt;
Para cargar a textura creamos unha propiedade Texture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
private Texture textura;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
No método create cargamos a textura dende o arquivo e a asociamos ó obxecto:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
FileHandle imageFileHandle = Gdx.files.internal(&amp;quot;badlogic.jpg&amp;quot;);&lt;br /&gt;
textura = new Texture(imageFileHandle);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Agora temos que debuxar a textura. Para facelo temos que habilitar o uso de texturas e &amp;#039;vincular&amp;#039; a textura ó Mesh:&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;6,7,9&amp;quot; &amp;gt;&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render() {&lt;br /&gt;
&lt;br /&gt;
		Gdx.gl20.glClearColor(0f, 0f, 0f, 1f);&lt;br /&gt;
		Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
		Gdx.gl20.glEnable(GL20.GL_TEXTURE_2D);&lt;br /&gt;
		textura.bind(0);&lt;br /&gt;
		shaderProgram.begin();&lt;br /&gt;
		shaderProgram.setUniformi(&amp;quot;u_texture&amp;quot;, 0);&lt;br /&gt;
		triangulo1.render(shaderProgram, GL20.GL_TRIANGLES,0,3);&lt;br /&gt;
		shaderProgram.end();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Imos analizar un pouco o código:&lt;br /&gt;
&lt;br /&gt;
* Liña 6: habilitamos o uso de texturas.&lt;br /&gt;
* Liña 7: en OPEN GL temos un conxunto de textura a utilizar. O que fai o bind é asociar a textura que cargamos a unha das texturas dispoñibles en OPEN GL. Concretamente á número 0. A cero é a textura por defecto polo que cando chamamos ó método bind poderíamos non enviarlle ningún numero.&lt;br /&gt;
* Liña 9: isto xa o veremos cando expliquemos o uso de Shader´s. Con esta liña estamos a &amp;#039;pasar&amp;#039; a textura 0 (que está cargada na liña 7) ó fragmentShader para que cada punto poida coller o punto da textura que lle corresponda. &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 UD4_1_Triangulos3D&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; Vincular unha textura a un Mesh.&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;
package com.plategaxogo3d.exemplos;&lt;br /&gt;
&lt;br /&gt;
import com.badlogic.gdx.Game;&lt;br /&gt;
import com.badlogic.gdx.Gdx;&lt;br /&gt;
import com.badlogic.gdx.files.FileHandle;&lt;br /&gt;
import com.badlogic.gdx.graphics.GL20;&lt;br /&gt;
import com.badlogic.gdx.graphics.Mesh;&lt;br /&gt;
import com.badlogic.gdx.graphics.Texture;&lt;br /&gt;
import com.badlogic.gdx.graphics.VertexAttribute;&lt;br /&gt;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Traballos coa clase Mesh para definir un triángulo en 3D&lt;br /&gt;
 * @author ANGEL&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
public class UD4_1_Triangulos3D extends Game {&lt;br /&gt;
&lt;br /&gt;
	private Mesh triangulo1; // Definimos un obxecto pertencente á clase Mesh&lt;br /&gt;
	private ShaderProgram shaderProgram;&lt;br /&gt;
	private Texture textura;&lt;br /&gt;
	private Texture prueba;&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;
		// create shader program&lt;br /&gt;
		String vertexShader = &amp;quot;attribute vec4 &amp;quot;+ ShaderProgram.POSITION_ATTRIBUTE +&amp;quot;;\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;attribute vec4 &amp;quot; + ShaderProgram.COLOR_ATTRIBUTE +&amp;quot;;	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;attribute vec2 &amp;quot; + ShaderProgram.TEXCOORD_ATTRIBUTE + &amp;quot;0;\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color; 		\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec2 v_textCoord; 		\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;	gl_Position = &amp;quot; + ShaderProgram.POSITION_ATTRIBUTE +&amp;quot;;\n&amp;quot;&lt;br /&gt;
				+ &amp;quot; v_color = &amp;quot; + ShaderProgram.COLOR_ATTRIBUTE +&amp;quot;;\n&amp;quot; 	&lt;br /&gt;
				+ &amp;quot; v_textCoord = &amp;quot; + ShaderProgram.TEXCOORD_ATTRIBUTE+ &amp;quot;0;	\n&amp;quot;&lt;br /&gt;
				+&amp;quot;}								\n&amp;quot;;&lt;br /&gt;
		String fragmentShader = &amp;quot;#ifdef GL_ES 	\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;precision mediump float;		\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;#endif						\n&amp;quot;&lt;br /&gt;
				+ &amp;quot;varying vec4 v_color;		\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot;varying vec2 v_textCoord;	\n&amp;quot;  &lt;br /&gt;
				+ &amp;quot;uniform sampler2D u_texture; \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;void main()					\n&amp;quot; &lt;br /&gt;
				+ &amp;quot;{							\n&amp;quot;&lt;br /&gt;
				+ &amp;quot; vec4 texColor = texture2D(u_texture, v_textCoord); \n&amp;quot;&lt;br /&gt;
				+ &amp;quot; gl_FragColor = texColor*v_color; \n&amp;quot;&lt;br /&gt;
				+ &amp;quot;}							\n&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		// Creamos o ShaderProgram en base ós programas definidos anteriormente&lt;br /&gt;
		shaderProgram = new ShaderProgram(vertexShader, fragmentShader);&lt;br /&gt;
		if (shaderProgram.isCompiled() == false) {&lt;br /&gt;
			Gdx.app.log(&amp;quot;ShaderError&amp;quot;, shaderProgram.getLog());&lt;br /&gt;
			System.exit(0);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// CON COR&lt;br /&gt;
		triangulo1 = new Mesh(false, 3, 3, VertexAttribute.Position(), VertexAttribute.ColorUnpacked(),VertexAttribute.TexCoords(0));&lt;br /&gt;
		triangulo1.setVertices(new float[] {-0.5f, -0.5f, 0, 1, 0, 0, 1, 0, 1, &lt;br /&gt;
						 0.5f, -0.5f, 0, 0, 0, 1, 1, 1, 1,  &lt;br /&gt;
						 0, 0.5f, 0, 0, 1, 0, 1, 0.5f,0});&lt;br /&gt;
		triangulo1.setIndices(new short[] { 0, 1, 2 });&lt;br /&gt;
&lt;br /&gt;
		FileHandle imageFileHandle = Gdx.files.internal(&amp;quot;badlogic.jpg&amp;quot;);&lt;br /&gt;
		textura = new Texture(imageFileHandle);&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void render() {&lt;br /&gt;
&lt;br /&gt;
		Gdx.gl20.glClearColor(0f, 0f, 0f, 1f);&lt;br /&gt;
		Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);&lt;br /&gt;
		Gdx.gl20.glEnable(GL20.GL_TEXTURE_2D);&lt;br /&gt;
&lt;br /&gt;
		textura.bind();		&lt;br /&gt;
		shaderProgram.begin();&lt;br /&gt;
		shaderProgram.setUniformi(&amp;quot;u_texture&amp;quot;, 0);&lt;br /&gt;
		triangulo1.render(shaderProgram, GL20.GL_TRIANGLES,0,3);&lt;br /&gt;
		shaderProgram.end();&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	@Override&lt;br /&gt;
	public void dispose(){&lt;br /&gt;
		shaderProgram.dispose();&lt;br /&gt;
		triangulo1.dispose();&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;
Ó executar o código dará como resultado o seguinte:&lt;br /&gt;
[[Imagen:LIBGDX_UD4_Mesh_10.jpg | 300px | center]]&lt;br /&gt;
&lt;br /&gt;
Fixarse como a cor se aplica sobre a textura para darlle diferentes tonalidades.&lt;br /&gt;
Isto é así porque no fragmentShader temos a seguinte liña: gl_FragColor = texColor*v_color;&lt;br /&gt;
Se queremos que a cor non modifique a textura teríamos que poñer: gl_FragColor = texColor;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;TAREFA 4.1 A FACER:&amp;#039;&amp;#039;&amp;#039; Esta parte está asociada á realización dunha tarefa. En caso de decidir facer o xogo proposto non será necesario facela.  &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>