<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Shakaran &#187; OpenGL</title> <atom:link href="http://shakaran.net/blog/category/OpenGL/feed/" rel="self" type="application/rss+xml" /><link>http://shakaran.net/blog</link> <description>Blog de un estudiante de ingeniería informática y sysadmin</description> <lastBuildDate>Sun, 29 Aug 2010 04:21:39 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <image><link>http://shakaran.net/blog</link> <url>http://www.shakaran.net/blog/wp-content/favicon.png</url><title>Shakaran</title> </image> <item><title>Menús y cambio de formas geométricas con OpenGL</title><link>http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/</link> <comments>http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/#comments</comments> <pubDate>Thu, 12 Feb 2009 03:06:17 +0000</pubDate> <dc:creator>shakaran</dc:creator> <category><![CDATA[OpenGL]]></category> <category><![CDATA[cambio]]></category> <category><![CDATA[color]]></category> <category><![CDATA[ejemplo]]></category> <category><![CDATA[example]]></category> <category><![CDATA[geometrico]]></category> <category><![CDATA[keyboard]]></category> <category><![CDATA[menus]]></category> <category><![CDATA[triangulos]]></category> <category><![CDATA[ventanas]]></category><guid isPermaLink="false">http://shakaran.net/blog/?p=266</guid> <description><![CDATA[jQuery(document).ready(function($) { window.setTimeout('loadDigg_266()',5000);window.setTimeout('loadReddit_266()',5000);window.setTimeout('loadGBuzz_266()',5000);window.setTimeout('loadDzone_266()',5000);window.setTimeout('loadTwitter_266()',5000);window.setTimeout('loadFBShare_266()',5000);window.setTimeout('loadFBShareMe_266()',5000);window.setTimeout('loadFBLike_266()',5000);window.setTimeout('loadDelicious_266()',5000);$('.delicious-normal-img,.delicious-compact-img').hide(); }); function loadDigg_266(){ jQuery(document).ready(function($) { $('.dd-digg-266').remove();$('.DD_DIGG_AJAX_266').attr('href','http://digg.com/submit?url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&#38;title=Men%C3%BAs+y+cambio+de+formas+geom%C3%A9tricas+con+OpenGL');$.getScript('http://widgets.digg.com/buttons.js'); }); } function loadReddit_266(){ jQuery(document).ready(function($) { $('.dd-reddit-266').remove();$('.DD_REDDIT_AJAX_266').attr('width','51');$('.DD_REDDIT_AJAX_266').attr('height','69');$('.DD_REDDIT_AJAX_266').attr('src','http://www.reddit.com/static/button/button2.html?width=51&#38;url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&#38;title=Men%C3%BAs+y+cambio+de+formas+geom%C3%A9tricas+con+OpenGL&#38;newwindow=1'); }); } function loadGBuzz_266(){ jQuery(document).ready(function($) { $('.dd-gbuzz-266').remove();$.getScript('http://www.google.com/buzz/api/button.js'); }); } function loadDzone_266(){ jQuery(document).ready(function($) { $('.dd-dzone-266').remove();$('.DD_DZONE_AJAX_266').attr('width','52');$('.DD_DZONE_AJAX_266').attr('height','68');$('.DD_DZONE_AJAX_266').attr('src','http://widgets.dzone.com/links/widgets/zoneit.html?url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&#038;title=Men%C3%BAs+y+cambio+de+formas+geom%C3%A9tricas+con+OpenGL&#038;t=1'); }); } function loadTwitter_266(){ jQuery(document).ready(function($) { $('.dd-twitter-266').remove();$('.DD_TWITTER_AJAX_266').attr('width','50');$('.DD_TWITTER_AJAX_266').attr('height','61');$('.DD_TWITTER_AJAX_266').attr('src','http://api.tweetmeme.com/button.js?url=VOTE_URL&#038;source=VOTE_SOURCE&#038;style=normal&#038;service=VOTE_SERVICE_NAME&#038;service_api=VOTE_SERVICE_API'); }); } function loadFBShare_266(){ jQuery(document).ready(function($) { $('.dd-fbshare-266').remove(); $.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share'); }); } function loadFBShareMe_266(){ jQuery(document).ready(function($) { $('.dd-fbshareme-266').remove();$('.DD_FBSHAREME_AJAX_266').attr('width','53');$('.DD_FBSHAREME_AJAX_266').attr('height','69');$('.DD_FBSHAREME_AJAX_266').attr('src','http://widgets.fbshare.me/files/fbshare.php?url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&#038;size=large'); }); } function [...]<br /><div><img src="http://shakaran.net/blog/wp-content/plugins/gd-star-rating/gfx.php?value=4.0" /></div><div>Rating: 4.0/<strong>10</strong> (3 votes cast)</div><br />Entradas relacionadas:<ol><li><a href='http://shakaran.net/blog/2008/07/cumplir-estandar-w3c-con-target-blank-utilizando-mootools/' rel='bookmark' title='Permanent Link: Cumplir estandar W3C con target=&#8221;_blank&#8221; utilizando Mootools'>Cumplir estandar W3C con target=&#8221;_blank&#8221; utilizando Mootools</a></li></ol>]]></description> <content:encoded><![CDATA[<div class="wpbuzzer_button" style="float: right"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="normal-button" data-url="http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/" data-imageurl=""></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div><script type="text/javascript">jQuery(document).ready(function($){window.setTimeout('loadDigg_266()',5000);window.setTimeout('loadReddit_266()',5000);window.setTimeout('loadGBuzz_266()',5000);window.setTimeout('loadDzone_266()',5000);window.setTimeout('loadTwitter_266()',5000);window.setTimeout('loadFBShare_266()',5000);window.setTimeout('loadFBShareMe_266()',5000);window.setTimeout('loadFBLike_266()',5000);window.setTimeout('loadDelicious_266()',5000);$('.delicious-normal-img,.delicious-compact-img').hide();});</script><script type="text/javascript">/*<![CDATA[*/function loadDigg_266(){jQuery(document).ready(function($){$('.dd-digg-266').remove();$('.DD_DIGG_AJAX_266').attr('href','http://digg.com/submit?url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&amp;title=Men%C3%BAs+y+cambio+de+formas+geom%C3%A9tricas+con+OpenGL');$.getScript('http://widgets.digg.com/buttons.js');});}function loadReddit_266(){jQuery(document).ready(function($){$('.dd-reddit-266').remove();$('.DD_REDDIT_AJAX_266').attr('width','51');$('.DD_REDDIT_AJAX_266').attr('height','69');$('.DD_REDDIT_AJAX_266').attr('src','http://www.reddit.com/static/button/button2.html?width=51&amp;url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&amp;title=Men%C3%BAs+y+cambio+de+formas+geom%C3%A9tricas+con+OpenGL&amp;newwindow=1');});}function loadGBuzz_266(){jQuery(document).ready(function($){$('.dd-gbuzz-266').remove();$.getScript('http://www.google.com/buzz/api/button.js');});}function loadDzone_266(){jQuery(document).ready(function($){$('.dd-dzone-266').remove();$('.DD_DZONE_AJAX_266').attr('width','52');$('.DD_DZONE_AJAX_266').attr('height','68');$('.DD_DZONE_AJAX_266').attr('src','http://widgets.dzone.com/links/widgets/zoneit.html?url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&title=Men%C3%BAs+y+cambio+de+formas+geom%C3%A9tricas+con+OpenGL&t=1');});}function loadTwitter_266(){jQuery(document).ready(function($){$('.dd-twitter-266').remove();$('.DD_TWITTER_AJAX_266').attr('width','50');$('.DD_TWITTER_AJAX_266').attr('height','61');$('.DD_TWITTER_AJAX_266').attr('src','http://api.tweetmeme.com/button.js?url=VOTE_URL&source=VOTE_SOURCE&style=normal&service=VOTE_SERVICE_NAME&service_api=VOTE_SERVICE_API');});}function loadFBShare_266(){jQuery(document).ready(function($){$('.dd-fbshare-266').remove();$.getScript('http://static.ak.fbcdn.net/connect.php/js/FB.Share');});}function loadFBShareMe_266(){jQuery(document).ready(function($){$('.dd-fbshareme-266').remove();$('.DD_FBSHAREME_AJAX_266').attr('width','53');$('.DD_FBSHAREME_AJAX_266').attr('height','69');$('.DD_FBSHAREME_AJAX_266').attr('src','http://widgets.fbshare.me/files/fbshare.php?url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&size=large');});}function loadFBLike_266(){jQuery(document).ready(function($){$('.dd-fblike-266').remove();$('.DD_FBLIKE_AJAX_266').attr('width','450');$('.DD_FBLIKE_AJAX_266').attr('height','25');$('.DD_FBLIKE_AJAX_266').attr('src','http://www.facebook.com/plugins/like.php?href=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&amp;show_faces=false');});}function loadDelicious_266(){jQuery(document).ready(function($){$('.dd-delicious-266').remove();$('.delicious-normal-img,.delicious-compact-img').show();$.getJSON('http://feeds.delicious.com/v2/json/urlinfo/data?url=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/&amp;callback=?',function(data){var msg='';var count=0;if(data.length>0){count=data[0].total_posts;if(count==0){msg='Save';}else if(count==1){msg='1 save';}else{msg=count+' saves'}}else{msg='Save';}$('#DD_DELICIOUS_AJAX_266').text(msg);});});}/*]]>*/</script><p style="text-align: justify;"><a href="http://www.opengl.org" target="_blank">OpenGL</a> es un <strong>librería de gráficos</strong> bastante versátil. En este artículo vamos a ver un pequeño ejemplo de su potencial.</p><p style="text-align: justify;">El ejemplo consiste en <strong>dibujar un triángulo blanco</strong> en una ventana y que al pulsar la tecla &#8216;c&#8217; nuestro triángulo se coloree de rojo, verde y blanco en cada vértice. Por otro lado si pulsamos la tecla escape &#8216;Esc&#8217; la aplicación terminará. Además <strong>añadiremos un pequeño menú</strong> que se accionara al pulsar el botón derecho del ratón, donde tendremos la opción de cambiar de modo y salir.</p><p style="text-align: justify;">Una pequeña imagen que detalla el proceso:</p><div id="attachment_267" class="wp-caption aligncenter" style="width: 512px"><img class="size-full wp-image-267" title="opengl-triangulos-ejemplo" src="http://shakaran.net.nyud.net/blog/wp-content/uploads/2009/02/opengl-triangulos-ejemplo.png" alt="opengl-triangulos-ejemplo" width="502" height="272" /><p class="wp-caption-text">Ejemplo sencillo con OpenGL</p></div><p>A continuación pongo el código y más adelante lo detallo paso a paso:</p><div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Descargar <a href="http://shakaran.net/blog/wp-content/plugins/wp-codebox/wp-codebox.php?p=266&amp;download=ejercicio.c">ejercicio.c</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2664"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
</pre></td><td class="code" id="p266code4"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt; stdio.h &gt;;</span>
<span style="color: #339933;">#include &lt; stdlib.h &gt;;</span>
<span style="color: #339933;">#include &lt; GL/glut.h &gt;;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">enum</span> <span style="color: #009900;">&#123;</span>
Â  MENU_CHANGE <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>
Â  MENU_EXIT
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">static</span> <span style="color: #993333;">int</span> mode <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> SelectFromMenu<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> idCommand<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>Â Â 
Â Â Â  <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>idCommand<span style="color: #009900;">&#41;</span>
Â Â Â  <span style="color: #009900;">&#123;</span>
Â Â Â Â Â Â Â  <span style="color: #b1b100;">case</span> MENU_CHANGE<span style="color: #339933;">:</span>
Â Â Â Â Â Â Â Â Â Â Â  mode <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>mode <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
Â Â Â Â Â Â Â Â Â Â Â  glutPostRedisplay<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â Â Â Â Â Â Â Â Â  <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â  <span style="color: #b1b100;">case</span> MENU_EXIT<span style="color: #339933;">:</span>
Â Â Â Â Â Â Â Â Â Â Â  exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â Â Â Â Â Â Â Â Â  <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
Â Â Â  <span style="color: #009900;">&#125;</span>
Â Â Â  glutPostRedisplay<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> Keyboard<span style="color: #009900;">&#40;</span><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> key<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> x<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> y<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
Â Â Â  <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>key<span style="color: #009900;">&#41;</span>
Â Â Â  <span style="color: #009900;">&#123;</span>
Â Â Â Â Â Â Â  <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">27</span><span style="color: #339933;">:</span> <span style="color: #666666; font-style: italic;">// ESCAPE key</span>
Â Â Â Â Â Â Â Â Â Â Â  exit<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â Â Â Â Â Â Â Â Â  <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â  <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'c'</span><span style="color: #339933;">:</span>
Â Â Â Â Â Â Â Â Â Â Â  SelectFromMenu<span style="color: #009900;">&#40;</span>MENU_CHANGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â Â Â Â Â Â Â Â Â  <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
Â Â Â  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> buildPopupMenu<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
Â Â Â  <span style="color: #993333;">int</span> menu <span style="color: #339933;">=</span> glutCreateMenu<span style="color: #009900;">&#40;</span>SelectFromMenu<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutAddMenuEntry<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Cambiar modo<span style="color: #000099; font-weight: bold;">\t</span>c&quot;</span><span style="color: #339933;">,</span> MENU_CHANGE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutAddMenuEntry<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Salir<span style="color: #000099; font-weight: bold;">\t</span>Esc&quot;</span><span style="color: #339933;">,</span> MENU_EXIT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â  <span style="color: #b1b100;">return</span> menu<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> display <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
Â Â Â  glClear<span style="color: #009900;">&#40;</span>GL_COLOR_BUFFER_BIT <span style="color: #339933;">|</span> GL_DEPTH_BUFFER_BIT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glLoadIdentity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glTranslatef<span style="color: #009900;">&#40;</span><span style="color:#800080;">0.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">0.0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color:#800080;">4.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
Â Â Â  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>mode <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
Â Â Â  <span style="color: #009900;">&#123;</span>
Â Â Â Â Â Â Â  glBegin<span style="color: #009900;">&#40;</span>GL_TRIANGLES<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â Â Â Â Â  glColor3f <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>Â Â Â  <span style="color: #666666; font-style: italic;">// White colour</span>
Â Â Â Â Â Â Â Â Â Â Â  glVertex3f<span style="color: #009900;">&#40;</span><span style="color:#800080;">0.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â Â Â Â Â Â Â Â Â  glVertex3f<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â Â Â Â Â Â Â Â Â  glVertex3f<span style="color: #009900;">&#40;</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â  glEnd<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  <span style="color: #009900;">&#125;</span>
Â Â Â  <span style="color: #b1b100;">else</span>
Â Â Â  <span style="color: #009900;">&#123;</span>
Â Â Â Â Â Â Â  glBegin<span style="color: #009900;">&#40;</span>GL_TRIANGLES<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â Â Â Â Â  glColor3f <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span>.<span style="color: #202020;">f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>Â Â Â  <span style="color: #666666; font-style: italic;">// Green colour</span>
Â Â Â Â Â Â Â Â Â Â Â  glVertex3f<span style="color: #009900;">&#40;</span><span style="color:#800080;">0.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â Â Â Â Â  glColor3f <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>Â Â Â  <span style="color: #666666; font-style: italic;">// White colour</span>
Â Â Â Â Â Â Â Â Â Â Â  glVertex3f<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â Â Â Â Â  glColor3f <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span>.<span style="color: #202020;">f</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span>.<span style="color: #202020;">f</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>Â Â Â  <span style="color: #666666; font-style: italic;">// Red colour</span>
Â Â Â Â Â Â Â Â Â Â Â  glVertex3f<span style="color: #009900;">&#40;</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color:#800080;">1.0</span><span style="color: #339933;">,</span> <span style="color:#800080;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â Â Â Â Â  glEnd<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  <span style="color: #009900;">&#125;</span>
&nbsp;
Â Â Â  glutSwapBuffers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> resize <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> w<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> h<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
Â Â Â  glViewport<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> w<span style="color: #339933;">,</span> h<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glMatrixMode<span style="color: #009900;">&#40;</span>GL_PROJECTION<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glLoadIdentity<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  gluPerspective<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">50</span>.<span style="color: #339933;">,</span> w<span style="color: #339933;">/</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">double</span><span style="color: #009900;">&#41;</span>h<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span>.<span style="color: #339933;">,</span> <span style="color: #0000dd;">10</span>.<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glMatrixMode<span style="color: #009900;">&#40;</span>GL_MODELVIEW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> init <span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
Â Â Â  glEnable<span style="color: #009900;">&#40;</span>GL_DEPTH_TEST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
Â Â Â  glutInit<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>argc<span style="color: #339933;">,</span> argv<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutInitDisplayMode<span style="color: #009900;">&#40;</span>GLUT_DOUBLE <span style="color: #339933;">|</span> GLUT_RGB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutInitWindowSize<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">400</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">400</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutInitWindowPosition<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutCreateWindow<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Ejercicio&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutDisplayFunc<span style="color: #009900;">&#40;</span>display<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutReshapeFunc<span style="color: #009900;">&#40;</span>resize<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutKeyboardFunc<span style="color: #009900;">&#40;</span>Keyboard<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â  buildPopupMenu<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Â Â Â  glutAttachMenu<span style="color: #009900;">&#40;</span>GLUT_RIGHT_BUTTON<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â  glutMainLoop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
Â Â Â  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div><p style="text-align: justify;">El <strong>funcionamiento principal</strong>, es tener una función display(), que según en el modo que estemos, dibujara una u otra figura (coloreada de una manera u otra). Para ello utilizaremos una variable global estática con la que<strong> guardaremos el modo</strong> en el que estamos, cuando se requiera redibujar, miraremos el modo y lo cambiaremos y dibujaremos la nueva figura. Las funcion de keyboard() llamará al menu según la tecla (salir o cambiar modo) y <strong>el menú se encargara de llamar a display</strong> y cambiar el modo.</p><p style="text-align: justify;">De forma más detalla en la funcion main() primero pasamos los argumentos de entrada con glutInit() y inicializamos glutInitDisplaymode con un <strong>doble buffer y RGB</strong>, ya que necesitaremos un buffer doble para que nuestras figuras se rendericen en un frame y mientras en otro se procesen.</p><p style="text-align: justify;">Le damos un <strong>tamaño a la ventana</strong> de 400&#215;400 con glutInitWindowSize() y en la posición 200&#215;200 con un título de ventana &#8220;Ejercicio&#8221;. y llamamos a la función init para que active la prueba de profundidad.</p><p style="text-align: justify;">Luego asignamos una funcion de retrollamada (callback) para mostrar nuestra ventana con lgutDiplayFunc(), la <strong>función de retrollamada</strong> sera display(), que la veremos más adelante.</p><p style="text-align: justify;">Otra función de retrollamada para cuando <strong>redimensionemos la ventana</strong> y despues llamaremos a buildPopupMenu() que sera una función para construir nuestro menú.</p><p style="text-align: justify;">Y adjuntaremos el menú cuando se presione <strong>el botón derecho </strong>del ratón con glutAttachmenu(). Despues llamamos al bucle principal de glut.</p><p style="text-align: justify;"><span style="text-decoration: underline;"><strong>Nota</strong></span>: algo importante a resaltar, si utilizas una <span style="text-decoration: underline;"><strong>tarjeta gráfica ATI,</strong></span> es posible que tengas algun fallo si pones la línea, ya que el buffer no quedara totalmente limpio al dibujar en pantalla:</p><div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p266code5'); return false;">Ver código</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2665"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p266code5"><pre class="c" style="font-family:monospace;"> glClear<span style="color: #009900;">&#40;</span>GL_COLOR_BUFFER_BIT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p>Por eso es mejor ponerlo así y <strong>evitamos este tipo de fallos</strong> (desconozco si en otras tarjetas se da dicho fallo):</p><div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p266code6'); return false;">Ver código</a> C</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p2666"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p266code6"><pre class="c" style="font-family:monospace;">glClear<span style="color: #009900;">&#40;</span>GL_COLOR_BUFFER_BIT <span style="color: #339933;">|</span> GL_DEPTH_BUFFER_BIT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div><p style="text-align: justify;">Para compilar:</p><pre line="1" lang="shell" file="compilar.txt" style="text-align: justify;">gcc -lGL -lGLU -lglut ejercicio.c -o ejercicio</pre><p style="text-align: justify;">Y ejecutarlo:</p><pre line="1" lang="shell" file="ejecutar.txt" style="text-align: justify;">./ejercicio</pre><p style="text-align: justify;">¿Te ha gustado o resultado útil? Pues <strong>deja un comentario</strong> con tu opinión <img src='http://shakaran.net.nyud.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p><div class='dd_post_share'><div class='dd_buttons'><div class='dd_button'><div class='dd-digg-ajax-load dd-digg-266'></div><a class='DiggThisButton DD_DIGG_AJAX_266 DiggCompact'></a></div><div class='dd_button'><div class='dd-reddit-ajax-load dd-reddit-266'></div><iframe class='DD_REDDIT_AJAX_266' src='#' height='0' width='0' scrolling='no' frameborder='0'></iframe></div><div class='dd_button'><div class='dd-dzone-ajax-load dd-dzone-266'></div><iframe class='DD_DZONE_AJAX_266' src='#' height='0' width='0' scrolling='no' frameborder='0'></iframe></div><div class='dd_button'><div class='dd-fbshare-ajax-load dd-fbshare-266'></div><a class='DD_FBSHARE_AJAX_266' name='fb_share' type='button_count' share_url='http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/' href='http://www.facebook.com/sharer.php'></a></div><div class='dd_button'><div class='dd-fblike-ajax-load dd-fblike-266'></div><iframe class="DD_FBLIKE_AJAX_266" src='#' height='0' width='0' scrolling='no' frameborder='0' allowTransparency='true'></iframe></div><div class='dd_button'><div class='dd-delicious-ajax-load dd-delicious-266'></div><a href='http://delicious.com/save' onclick="window.open('http://delicious.com/save?v=5&amp;noui&amp;jump=close&amp;url='+encodeURIComponent('http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/')+'&amp;title='+encodeURIComponent('Men%C3%BAs+y+cambio+de+formas+geom%C3%A9tricas+con+OpenGL'),'delicious', 'toolbar=no,width=550,height=550'); return false;"><div class='delicious-compact-img'><img src='http://shakaran.net/blog/wp-content/plugins/digg-digg/image/delicious-compact.png' alt='Delicious' /></div><span id='DD_DELICIOUS_AJAX_266'></span></a></div><div class='dd_button'><script src='http://www.stumbleupon.com/hostedbadge.php?s=1&amp;r=http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/'></script></div></div></div><div style='clear:both'></div><br /><div><img src="http://shakaran.net/blog/wp-content/plugins/gd-star-rating/gfx.php?value=4.0" /></div><div>Rating: 4.0/<strong>10</strong> (3 votes cast)</div><br /><div class="sociable"><div class="sociable_tagline"> <strong>Comparte, descargalo en pdf, imprimelo o enviaselo a un amigo!</strong></div><ul><li class="sociablefirst"><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F&amp;partner=sociable" title="Print"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F&amp;title=Men%C3%BAs%20y%20cambio%20de%20formas%20geom%C3%A9tricas%20con%20OpenGL&amp;bodytext=OpenGL%20es%20un%20librer%C3%ADa%20de%20gr%C3%A1ficos%20bastante%20vers%C3%A1til.%20En%20este%20art%C3%ADculo%20vamos%20a%20ver%20un%20peque%C3%B1o%20ejemplo%20de%20su%20potencial.%0D%0AEl%20ejemplo%20consiste%20en%20dibujar%20un%20tri%C3%A1ngulo%20blanco%20en%20una%20ventana%20y%20que%20al%20pulsar%20la%20tecla%20%27c%27%20nuestro%20tri%C3%A1ngulo%20se%20coloree%20" title="Digg"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F&amp;title=Men%C3%BAs%20y%20cambio%20de%20formas%20geom%C3%A9tricas%20con%20OpenGL&amp;notes=OpenGL%20es%20un%20librer%C3%ADa%20de%20gr%C3%A1ficos%20bastante%20vers%C3%A1til.%20En%20este%20art%C3%ADculo%20vamos%20a%20ver%20un%20peque%C3%B1o%20ejemplo%20de%20su%20potencial.%0D%0AEl%20ejemplo%20consiste%20en%20dibujar%20un%20tri%C3%A1ngulo%20blanco%20en%20una%20ventana%20y%20que%20al%20pulsar%20la%20tecla%20%27c%27%20nuestro%20tri%C3%A1ngulo%20se%20coloree%20" title="del.icio.us"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F&amp;t=Men%C3%BAs%20y%20cambio%20de%20formas%20geom%C3%A9tricas%20con%20OpenGL" title="Facebook"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F&amp;title=Men%C3%BAs%20y%20cambio%20de%20formas%20geom%C3%A9tricas%20con%20OpenGL&amp;annotation=OpenGL%20es%20un%20librer%C3%ADa%20de%20gr%C3%A1ficos%20bastante%20vers%C3%A1til.%20En%20este%20art%C3%ADculo%20vamos%20a%20ver%20un%20peque%C3%B1o%20ejemplo%20de%20su%20potencial.%0D%0AEl%20ejemplo%20consiste%20en%20dibujar%20un%20tri%C3%A1ngulo%20blanco%20en%20una%20ventana%20y%20que%20al%20pulsar%20la%20tecla%20%27c%27%20nuestro%20tri%C3%A1ngulo%20se%20coloree%20" title="Google Bookmarks"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://barrapunto.com/submit.pl?subj=Men%C3%BAs%20y%20cambio%20de%20formas%20geom%C3%A9tricas%20con%20OpenGL&amp;story=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F" title="BarraPunto"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/barrapunto.png" title="BarraPunto" alt="BarraPunto" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://bitacoras.com/anotaciones/http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F" title="Bitacoras.com"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/bitacoras.png" title="Bitacoras.com" alt="Bitacoras.com" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://meneame.net/submit.php?url=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F" title="Meneame"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/meneame.png" title="Meneame" alt="Meneame" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://www.printfriendly.com/print?url=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F&amp;partner=sociable" title="PDF"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/pdf.png" title="PDF" alt="PDF" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://shakaran.net/blog/feed/" title="RSS"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/rss.png" title="RSS" alt="RSS" class="sociable-hovers" /></a></li><li><a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F&amp;title=Men%C3%BAs%20y%20cambio%20de%20formas%20geom%C3%A9tricas%20con%20OpenGL" title="StumbleUpon"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a></li><li class="sociablelast"><a rel="nofollow"  target="_blank" href="http://technorati.com/faves?add=http%3A%2F%2Fshakaran.net%2Fblog%2F2009%2F02%2Fmenus-y-cambio-de-formas-geometricas-con-opengl%2F" title="Technorati"><img src="http://shakaran.net/blog/wp-content/plugins/sociable/images/technorati.png" title="Technorati" alt="Technorati" class="sociable-hovers" /></a></li></ul></div><p>Entradas relacionadas:<ol><li><a href='http://shakaran.net/blog/2008/07/cumplir-estandar-w3c-con-target-blank-utilizando-mootools/' rel='bookmark' title='Permanent Link: Cumplir estandar W3C con target=&#8221;_blank&#8221; utilizando Mootools'>Cumplir estandar W3C con target=&#8221;_blank&#8221; utilizando Mootools</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://shakaran.net/blog/2009/02/menus-y-cambio-de-formas-geometricas-con-opengl/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using disk (enhanced)
Database Caching 14/52 queries in 1.510 seconds using disk
Object Caching 1165/1189 objects using disk
Content Delivery Network via shakaran.net.nyud.net

Served from: shakaran.net @ 2010-09-03 10:30:34 -->