{"id":47,"date":"2022-03-23T22:08:49","date_gmt":"2022-03-23T22:08:49","guid":{"rendered":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/"},"modified":"2022-03-23T22:08:49","modified_gmt":"2022-03-23T22:08:49","slug":"compilando-programas-que-utilizam-opengl","status":"publish","type":"page","link":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/","title":{"rendered":"Compilando programas que utilizam OpenGL"},"content":{"rendered":"<p>&#013;<\/p>\n<div class=\"NAVHEADER\">&#013;<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<th align=\"middle\" colspan=\"3\">Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013;<br \/>\nOpenGL<\/th>\n<\/tr>\n<p>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"bottom\" align=\"left\" width=\"10%\"><a href=\"estrutura-programa.html\">Prev<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"bottom\" align=\"middle\" width=\"80%\">Cap\u00edtulo 1. Conceitos &#013;<br \/>\n    iniciais<\/td>\n<p>&#013;<\/p>\n<td valign=\"bottom\" align=\"right\" width=\"10%\"><a href=\"compilando-programas-dev.html\">Next<\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<hr align=\"left\" width=\"100%\" \/>&#013;\n<\/div>\n<p>&#013;<\/p>\n<div class=\"SECT1\">&#013;<\/p>\n<h1 class=\"SECT1\"><a name=\"COMPILANDO-PROGRAMAS\">1.3. Compilando programas que &#013;<br \/>\nutilizam OpenGL &#8211; Linux<\/a><\/h1>\n<p>&#013;<\/p>\n<p>Todos os programas deste curso foram criados e testados no Linux (<a href=\"http:\/\/www.linux.org\" target=\"_top\" rel=\"noopener\">http:\/\/www.linux.org<\/a>), e &#013;<br \/>\nutilizam GLUT como biblioteca auxiliar para manipular janelas e tratar eventos. &#013;<br \/>\nEsta escolha pode ser justificada por duas raz\u00f5es principais:<\/p>\n<p>&#013;<\/p>\n<p \/>&#013;<\/p>\n<ol type=\"1\">&#013;<\/p>\n<li>&#013;\n<p>O Linux (clone do Unix) \u00e9 um \u00f3timo sistema operacional (o melhor, segundo a opini\u00e3o &#013;<br \/>\n  do meu amigo Prof. Agostinho). Um programa escrito em C padr\u00e3o, &#013;<br \/>\n  compilado e testado no Linux, tamb\u00e9m funcionar\u00e1 a contento em outros sistemas, &#013;<br \/>\n  principalmente se for compilado com a mesma ferramenta utilizada para compilar &#013;<br \/>\n  os exemplos deste curso, o <tt class=\"FILENAME\">gcc<\/tt>, da GNU (<a href=\"http:\/\/www.gnu.org\" target=\"_top\" rel=\"noopener\">http:\/\/www.gnu.org<\/a>). Al\u00e9m &#013;<br \/>\n  de ser gratuito, este compilador \u00e9 bastante otimizado e possui vers\u00f5es &#013;<br \/>\n  dispon\u00edveis para a maioria dos sistemas operacionais existentes.<\/p>\n<p>&#013;\n  <\/li>\n<li>&#013;\n<p>O GLUT est\u00e1 implementado em diversos sistemas operacionais, facilitando a &#013;<br \/>\n  portabilidade de programas.<\/p>\n<\/li>\n<\/ol>\n<p>&#013;<\/p>\n<p>As tarefas de compila\u00e7\u00e3o foram automatizadas com o utilit\u00e1rio <b class=\"COMMAND\">make<\/b>. O <b class=\"COMMAND\">make<\/b> determina automaticamente &#013;<br \/>\nque partes de um grande programa necessitam ser recompiladas e os comandos &#013;<br \/>\nnecess\u00e1rios para recompil\u00e1-las, a partir da leitura das regras definidas em um &#013;<br \/>\narquivo <tt class=\"FILENAME\">Makefile<\/tt>. Assim, para efetuar a compila\u00e7\u00e3o do &#013;<br \/>\nprograma, basta executar o comando <b class=\"COMMAND\">make<\/b>, ao inv\u00e9s de &#013;<br \/>\ndigitar v\u00e1rios comandos no prompt do Unix.<\/p>\n<p>&#013;<\/p>\n<p>O <tt class=\"FILENAME\">Makefile<\/tt> da <a href=\"compilando-programas.html#FIG-MAKEFILE\">Figura &#013;<br \/>\n1-2<\/a> foi utilizado para compilar os exemplos desse curso. Para obter uma &#013;<br \/>\nc\u00f3pia deste arquivo para uso no CESET clique <a href=\"Makefile_ceset\" target=\"_top\" rel=\"noopener\">aqui<\/a>. J\u00e1 para obter uma &#013;<br \/>\nc\u00f3pia do <tt class=\"FILENAME\">Makefile<\/tt> para uso no Unisal, clique <a href=\"Makefile_unisal\" target=\"_top\" rel=\"noopener\">aqui<\/a>. Grave-os em seu diret\u00f3rio de trabalho simplesmente com o nome <tt class=\"FILENAME\">Makefile<\/tt>.<\/p>\n<p>&#013;<\/p>\n<div class=\"FIGURE\">&#013;<\/p>\n<p><b><a name=\"FIG-MAKEFILE\">Figura 1-2. arquivo Makefile<\/a><\/b><\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\"># Compila programas do curso de OpenGL no ambiente Linux&#013;\n# Substitua nome_do_programa pelo nome do programa ...&#013;\n# ...que se est\u00e1 trabalhando&#013;\n#&#013;\n# Antes das linhas que cont\u00e9m \"gcc...\", n\u00e3o pode haver espa\u00e7o em&#013;\n# branco e sim uma marca de tabula\u00e7\u00e3o&#013;\n#&#013;\n# Prof. Marco Antonio&#013;\n#&#013;\n&#013;\n# Variables&#013;\nMESA = \/usr\/bin\/Mesa-5.0 &#013;\nINCPATH = -I$(MESA)\/include&#013;\nLIBPATH = -L$(MESA)\/lib&#013;\nLIBS        = -lglut -lGLU -lGL -lm&#013;\nCFLAGS  = $(INCPATH) -g&#013;\nLFLAGS  = $(LIBPATH) $(LIBS)&#013;\n&#013;\n# Main targets&#013;\nnome_do_programa: nome_do_programa.o&#013;\n        gcc -o nome_do_programa nome_do_programa.o $(LFLAGS)&#013;\n&#013;\n# Source targets&#013;\nnome_do_programa.o: nome_do_programa.c&#013;\n        gcc -c nome_do_programa.c $(CFLAGS)&#013;\n&#013;\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>&#013;<\/p>\n<p>As regras contidas neste arquivo Makefile incluem op\u00e7\u00f5es de compila\u00e7\u00e3o tais &#013;<br \/>\ncomo <b class=\"COMMAND\">-lglut<\/b>, referente \u00e0 biblioteca auxiliar GLUT, e <b class=\"COMMAND\">-lMesaGLU -lMesaGL<\/b>, referentes \u00e0s bibliotecas padr\u00e3o do OpenGL &#013;<br \/>\npara o Mesa3d, possibilitando que programas simples possam ser facilmente &#013;<br \/>\ncompilados.<\/p>\n<p>&#013;<\/p>\n<p><b>Aten\u00e7\u00e3o:<\/b> Os espa\u00e7os em branco antes das linhas 10, 14 e 18 no <b class=\"COMMAND\">Makefile<\/b> &#013;<br \/>\ns\u00e3o feitos com a tecla <b class=\"COMMAND\">TAB<\/b> (somente uma marca de tabula\u00e7\u00e3o).  <\/p>\n<p>&#013;<\/p>\n<p>Para testar se esse arquivo funciona no seu sistema, copie-o com o nome &#8220;<tt class=\"FILENAME\">Makefile<\/tt>&#8221; (o arquivo Makefile n\u00e3o tem extens\u00e3o) para um diret\u00f3rio qualquer, juntamente&#013;<br \/>\n com o programa <a href=\"teste-make.c\" target=\"_top\" rel=\"noopener\"><tt class=\"FILENAME\">teste-make.c<\/tt><\/a>, mostrado na <a href=\"compilando-programas.html#FIG-TESTE-MAKE\">Figura &#013;<br \/>\n1-3<\/a>. Altere o <i>Makefile<\/i> de forma que a palavra <i>nome_do_programa<\/i> seja substitu\u00edda por&#013;<br \/>\n<i>teste-make<\/i>. Dentro deste diret\u00f3rio, execute a seguinte seq\u00fc\u00eancia de comandos:<\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"SCREEN\"><tt class=\"PROMPT\">$<\/tt> <b class=\"COMMAND\">make<\/b> <span class=\"OPTION\">teste-make<\/span>&#013;\n<tt class=\"PROMPT\">$<\/tt> <b class=\"COMMAND\">.\/teste-make<\/b><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#013;<\/p>\n<p>Caso apare\u00e7a um quadrado preto dentro de uma janela com fundo branco, \u00e9 sinal &#013;<br \/>\nde que ocorreu tudo bem.<\/p>\n<p>&#013;<\/p>\n<div class=\"FIGURE\">&#013;<\/p>\n<p><b><a name=\"FIG-TESTE-MAKE\">Figura 1-3. programa <tt class=\"FILENAME\">teste-make.c<\/tt><\/a><\/b><\/p>\n<p>&#013;<\/p>\n<table width=\"100%\" bgcolor=\"#e0e0e0\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td>\n<pre class=\"PROGRAMLISTING\">\/* programa teste-make.c *\/&#013;\n\/* Desenha um quadrado preto em uma janela com fundo branco *\/&#013;\n&#013;\n#include &lt;GL\/glut.h&gt;&#013;\n#include &lt;stdlib.h&gt;&#013;\n&#013;\nvoid display(void);&#013;\n&#013;\nint main(int argc, char** argv){&#013;\n  glutInit(&amp;argc, argv);&#013;\n  glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);&#013;\n  glutInitWindowSize (256, 256); &#013;\n  glutInitWindowPosition (100, 100); &#013;\n  glutCreateWindow (argv[0]);&#013;\n  glClearColor(1.0, 1.0, 1.0, 0.0);&#013;\n  glShadeModel (GL_FLAT);&#013;\n  glOrtho (0, 1, 0, 1, -1 ,1);&#013;\n  glutDisplayFunc(display);&#013;\n  glutMainLoop();&#013;\n  return 0;&#013;\n}&#013;\n&#013;\n&#013;\nvoid display(void){&#013;\n  int i;&#013;\n  glClear(GL_COLOR_BUFFER_BIT);&#013;\n  glColor3f (0.0, 0.0, 0.0);&#013;\n  glBegin(GL_POLYGON);&#013;\n  glVertex2f(0.25,0.25);&#013;\n  glVertex2f(0.75,0.25);&#013;\n  glVertex2f(0.75,0.75);&#013;\n  glVertex2f(0.25,0.75);&#013;\n  glEnd();&#013;\n  glFlush();&#013;\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>&#013;<\/p>\n<div class=\"NAVFOOTER\">&#013;<\/p>\n<hr align=\"left\" width=\"100%\" \/>&#013;<br \/>\n&#013;<\/p>\n<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\">&#013;<\/p>\n<tbody>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"top\" align=\"left\" width=\"33%\"><a href=\"estrutura-programa.html\">Prev<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"middle\" width=\"34%\"><a href=\"index2006.html\">Home<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"right\" width=\"33%\"><a href=\"compilando-programas-dev.html\">Next<\/a><\/td>\n<\/tr>\n<p>&#013;<\/p>\n<tr>&#013;<\/p>\n<td valign=\"top\" align=\"left\" width=\"33%\">Estrutura de um programa<\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"middle\" width=\"34%\"><a href=\"conceitos-iniciais.html\">Up<\/a><\/td>\n<p>&#013;<\/p>\n<td valign=\"top\" align=\"right\" width=\"33%\">Compilando programas &#8211; usando o Dev<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; Cap\u00edtulo 1. Conceitos &#013; iniciais &#013; Next &#013; &#013; &#013; &#013; 1.3. Compilando programas que &#013; utilizam OpenGL &#8211; Linux &#013; Todos os programas deste curso foram criados e testados no Linux (http:\/\/www.linux.org), e &#013; utilizam GLUT como biblioteca &hellip; <a href=\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/\" class=\"more-link\">Continuar lendo <span class=\"screen-reader-text\">Compilando programas que utilizam OpenGL<\/span><\/a><\/p>\n","protected":false},"author":48,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-47","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Compilando programas que utilizam OpenGL - Marco Antonio Garcia de Carvalho, PhD<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Compilando programas que utilizam OpenGL - Marco Antonio Garcia de Carvalho, PhD\" \/>\n<meta property=\"og:description\" content=\"&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; Cap\u00edtulo 1. Conceitos &#013; iniciais &#013; Next &#013; &#013; &#013; &#013; 1.3. Compilando programas que &#013; utilizam OpenGL &#8211; Linux &#013; Todos os programas deste curso foram criados e testados no Linux (http:\/\/www.linux.org), e &#013; utilizam GLUT como biblioteca &hellip; Continuar lendo Compilando programas que utilizam OpenGL\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/\" \/>\n<meta property=\"og:site_name\" content=\"Marco Antonio Garcia de Carvalho, PhD\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/\",\"url\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/\",\"name\":\"Compilando programas que utilizam OpenGL - Marco Antonio Garcia de Carvalho, PhD\",\"isPartOf\":{\"@id\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/#website\"},\"datePublished\":\"2022-03-23T22:08:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Compilando programas que utilizam OpenGL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/#website\",\"url\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/\",\"name\":\"Marco Antonio Garcia de Carvalho, PhD\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wordpress.ft.unicamp.br\/magic\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Compilando programas que utilizam OpenGL - Marco Antonio Garcia de Carvalho, PhD","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/","og_locale":"pt_BR","og_type":"article","og_title":"Compilando programas que utilizam OpenGL - Marco Antonio Garcia de Carvalho, PhD","og_description":"&#013; &#013; &#013; &#013; &#013; Introdu\u00e7\u00e3o \u00e0 computa\u00e7\u00e3o gr\u00e1fica com &#013; OpenGL &#013; &#013; Prev &#013; Cap\u00edtulo 1. Conceitos &#013; iniciais &#013; Next &#013; &#013; &#013; &#013; 1.3. Compilando programas que &#013; utilizam OpenGL &#8211; Linux &#013; Todos os programas deste curso foram criados e testados no Linux (http:\/\/www.linux.org), e &#013; utilizam GLUT como biblioteca &hellip; Continuar lendo Compilando programas que utilizam OpenGL","og_url":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/","og_site_name":"Marco Antonio Garcia de Carvalho, PhD","twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/","url":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/","name":"Compilando programas que utilizam OpenGL - Marco Antonio Garcia de Carvalho, PhD","isPartOf":{"@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/#website"},"datePublished":"2022-03-23T22:08:49+00:00","breadcrumb":{"@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/compilando-programas-que-utilizam-opengl\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wordpress.ft.unicamp.br\/magic\/"},{"@type":"ListItem","position":2,"name":"Compilando programas que utilizam OpenGL"}]},{"@type":"WebSite","@id":"https:\/\/wordpress.ft.unicamp.br\/magic\/#website","url":"https:\/\/wordpress.ft.unicamp.br\/magic\/","name":"Marco Antonio Garcia de Carvalho, PhD","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wordpress.ft.unicamp.br\/magic\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"}]}},"_links":{"self":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages\/47","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/comments?post=47"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/pages\/47\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.ft.unicamp.br\/magic\/wp-json\/wp\/v2\/media?parent=47"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}