<?xml version="1.0" encoding="ISO-8859-1"?>
<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>Geek Vault &#187; C++</title>
	<atom:link href="http://www.geekvault.org/tag/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geekvault.org</link>
	<description>Because geeks, like to talk.</description>
	<lastBuildDate>Fri, 16 Jul 2010 12:47:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Autotools e CUDA</title>
		<link>http://www.geekvault.org/2010/06/autotools-e-cuda/</link>
		<comments>http://www.geekvault.org/2010/06/autotools-e-cuda/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 01:32:44 +0000</pubDate>
		<dc:creator>Zarnick</dc:creator>
				<category><![CDATA[ANSI C]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Stuffs]]></category>
		<category><![CDATA[autoconf]]></category>
		<category><![CDATA[autoheader]]></category>
		<category><![CDATA[automake]]></category>
		<category><![CDATA[autotools]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[CUDA]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[trac]]></category>

		<guid isPermaLink="false">http://www.geekvault.org/?p=533</guid>
		<description><![CDATA[Quem gosta de CUDA e Linux, sabe que não existe (a não ser que você procure na internet) suporte para CUDA nas autotools. Bom, eu procurei a um bom tempo atrás e criei um template para iniciar todos os meus projetos de CUDA e agora, não apenas estou liberando ele como um template, mas também [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.geekvault.org%2F2010%2F06%2Fautotools-e-cuda%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.geekvault.org%2F2010%2F06%2Fautotools-e-cuda%2F&amp;source=zarnick&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Quem gosta de CUDA e Linux, sabe que não existe (a não ser que você procure na internet) suporte para CUDA nas autotools. Bom, eu procurei a um bom tempo atrás e criei um template para iniciar todos os meus projetos de CUDA e agora, não apenas estou liberando ele como um template, mas também estou criando um <a href="http://trac.geekvault.org/cuda/" target="_blank">repositório</a> completo sobre CUDA no meu SVN onde obviamente esse é o primeiro projeto.<br />
Sem demoras, é possível efetuar o download e entender um pouco mais do projeto na <a href="http://trac.geekvault.org/cuda/wiki/autotools" target="_blank">página do projeto</a>.<br />
PS: Saiu a versão 3.1 com suporte a printf() em interfaces Fermin <img src='http://www.geekvault.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekvault.org/2010/06/autotools-e-cuda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Números aleatórios em C</title>
		<link>http://www.geekvault.org/2010/02/numeros-aleatorios-em-c/</link>
		<comments>http://www.geekvault.org/2010/02/numeros-aleatorios-em-c/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 22:09:55 +0000</pubDate>
		<dc:creator>Zarnick</dc:creator>
				<category><![CDATA[ANSI C]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[stuff]]></category>

		<guid isPermaLink="false">http://www.geekvault.org/?p=486</guid>
		<description><![CDATA[Bom, todos nós sabemos que rand() nos retorna uma distribuição uniforme de números aleatórios, na realidade praticamente todos os geradores de números aleatórios nos retorna uma distribuição uniforme, o problema é como utilizamos. Procurando sobre isso, encontrei esse artigo que explica o motivo do &#8220;erro&#8221; de utilização e como corrigir o mesmo. Enquanto ele não [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.geekvault.org%2F2010%2F02%2Fnumeros-aleatorios-em-c%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.geekvault.org%2F2010%2F02%2Fnumeros-aleatorios-em-c%2F&amp;source=zarnick&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Bom, todos nós sabemos que rand() nos retorna uma distribuição uniforme de números aleatórios, na realidade praticamente todos os geradores de números aleatórios nos retorna uma distribuição uniforme, o problema é como utilizamos. Procurando sobre isso, encontrei <a href="http://eternallyconfuzzled.com/arts/jsw_art_rand.aspx" target="_blank">esse</a> artigo que explica o motivo do &#8220;erro&#8221; de utilização e como corrigir o mesmo.<br />
Enquanto ele não resolve o problema para geração de números aleatórios em paralelo (minha mais nova paixão), ele dá boas dicas de como solucionar isso, e provavelmente como solucionar também em paralelismo (já que o problema está na utilização e não no algorítmo).<br />
Vale a pena dar uma lida, esse é um assunto muito importante para todos, principalmente para quem ainda gera os números dessa forma:</p>
<blockquote><p>
srand(time(NULL));<br />
int num = rand()%max;
</p></blockquote>
<p> <img src='http://www.geekvault.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekvault.org/2010/02/numeros-aleatorios-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nova especificação do C++ adiada para 2010</title>
		<link>http://www.geekvault.org/2009/07/nova-especificacao-do-c-adiada-para-2010/</link>
		<comments>http://www.geekvault.org/2009/07/nova-especificacao-do-c-adiada-para-2010/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 01:22:53 +0000</pubDate>
		<dc:creator>Zarnick</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Noticias]]></category>

		<guid isPermaLink="false">http://www.geekvault.org/?p=391</guid>
		<description><![CDATA[De acordo com essa notícia do Slashdot, a nova especificação do C++ (C++0X) será adiada para 2010 ou depois. O motivo é a sua mudança principal chamada &#8220;concepts&#8221;, que visam deixar os templates mais robustos. Honestamente eu não vi muito de C++ ainda para discutir a fundo templates, herança, polimorfismo, ou qualquer outra coisa, mas [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.geekvault.org%2F2009%2F07%2Fnova-especificacao-do-c-adiada-para-2010%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.geekvault.org%2F2009%2F07%2Fnova-especificacao-do-c-adiada-para-2010%2F&amp;source=zarnick&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>De acordo com <a href="http://tech.slashdot.org/story/09/07/23/1817225/Stroustrup-Says-New-C-Standard-Delayed-Until-2010-Or-Later" target="_blank">essa</a> notícia do <a href="http://slashdot.org" target="_self">Slashdot</a>, a nova especificação do C++ (C++0X) será adiada para 2010 ou depois. O motivo é a sua mudança principal chamada &#8220;concepts&#8221;, que visam deixar os templates mais robustos. Honestamente eu não vi muito de C++ ainda para discutir a fundo templates, herança, polimorfismo, ou qualquer outra coisa, mas uma nova especificação sempre é bem vinda (quando bem feita, que aparentemente é o caso), e pelo que li sobre &#8220;concepts&#8221; realmente é uma coisa bem complexa, que esta sendo desenvolvida a mais de 7 anos e ainda não está pronta. Como ela será o motivo principal do atraso, ela será retirada e a nova especificação irá se focar em outras coisas (como paralelismo por exemplo).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekvault.org/2009/07/nova-especificacao-do-c-adiada-para-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ogre, aos poucos&#8230;Menu 3D!</title>
		<link>http://www.geekvault.org/2009/06/ogre-aos-poucosmenu-3d/</link>
		<comments>http://www.geekvault.org/2009/06/ogre-aos-poucosmenu-3d/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 12:12:14 +0000</pubDate>
		<dc:creator>Zarnick</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Menu]]></category>
		<category><![CDATA[Ogre]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[projetos]]></category>
		<category><![CDATA[Trechos]]></category>

		<guid isPermaLink="false">http://www.geekvault.org/?p=339</guid>
		<description><![CDATA[Bom, eu sei que faz tempo que não aparecem trechos de códigos por aqui, culpe a falta de tempo. Mas nada são más notícias, eu tenho um trecho aqui de um Menu 3D, com alfabeto e tudo mais Ainda estou trabalhando na documentação, mas se você possui Linux e OGRE, pode brincar um pouco já, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.geekvault.org%2F2009%2F06%2Fogre-aos-poucosmenu-3d%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.geekvault.org%2F2009%2F06%2Fogre-aos-poucosmenu-3d%2F&amp;source=zarnick&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Bom, eu sei que faz tempo que não aparecem trechos de códigos por aqui, culpe a falta de tempo.<br />
Mas nada são más notícias, eu tenho um trecho aqui de um Menu 3D, com alfabeto e tudo mais <img src='http://www.geekvault.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Ainda estou trabalhando na documentação, mas se você possui Linux e OGRE, pode brincar um pouco já, a idéia é bem básica, existem um Zip com os .mesh representando o alfabeto (por falta de vocação em 3D e vontade, temos apenas de A-Z e 0-9), criei (estou aperfeiçoando) uma classe para cuidar de mostrar o alfabeto em um ambiente 3D e, uma classe de Menu, que utiliza esse alfabeto e umas animações bem básicas mesmo.<br />
Esse projeto eu vou fazer um pouco diferente, vou trabalhar no mesmo até conseguir entregar um binário de exemplo para Linux e Windows e, fazer com que esse binário rode em qualquer um desses SOs, com ou sem Ogre instalado.<br />
Para ver como está indo, o link do SVN é:</p>
<blockquote><p>http://svn.geekvault.org/ogre/MenuFramework</p></blockquote>
<p>Abraços, e até a próxima.<br />
Zarnick</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekvault.org/2009/06/ogre-aos-poucosmenu-3d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ogre, parte 1</title>
		<link>http://www.geekvault.org/2009/02/ogre-parte-1/</link>
		<comments>http://www.geekvault.org/2009/02/ogre-parte-1/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 11:32:40 +0000</pubDate>
		<dc:creator>Zarnick</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Stuffs]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Ogre]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.geekvault.org/?p=258</guid>
		<description><![CDATA[Bom, como prometido, temos algo do Ogre aqui Repito que não vou fazer um tutorial sobre isso, para isso vejam a Wiki do Ogre. Antes de mais nada, como já foi dito anteriormente, o Ogre por sí só é uma engine gráfica 3D, o que quer dizer que sim, você pode fazer seu jogo nela, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.geekvault.org%2F2009%2F02%2Fogre-parte-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.geekvault.org%2F2009%2F02%2Fogre-parte-1%2F&amp;source=zarnick&amp;style=compact&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Bom, como prometido, temos algo do <a href="http://www.ogre3d.org" target="_blank">Ogre</a> aqui <img src='http://www.geekvault.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: justify;">Repito que não vou fazer um tutorial sobre isso, para isso vejam a <a href="http://www.ogre3d.org/wiki/" target="_blank">Wiki</a> do Ogre.<br />
Antes de mais nada, como já foi dito anteriormente, o Ogre por sí só é uma engine gráfica 3D, o que quer dizer que sim, você pode fazer seu jogo nela, mas irá faltar no mínimo iteração com o usuário, som e física (verdade, alguns jogos não precisam de física, mas ficam muito melhores com;). Quando você instala o Ogre ele vem com a parte de iteração, utilizando agora o <a href="http://sourceforge.net/projects/wgois" target="_blank">OIS</a> (antigamente era a SDL) e para ter uma GUI, ele utiliza a <a href="http://www.cegui.org.uk/" target="_blank">CEGUI</a>. Com isso você já consegue fazer um jogo quase completo (isso e muita paciência), ou um aplicativo, que é o que vou mostrar aqui.<span id="more-258"></span></p>
<p style="text-align: justify;">Antes de mais nada,  vamos falar um pouco sobre onde estou desenvolvendo e exatamente o que estou desenvolvendo.</p>
<p style="text-align: justify;">Estou fazendo um programa para aprender direito como o Ogre funciona, o programa se chama OgreViewer, sua documentação pode ser encontrada <a href="http://manuals.geekvault.org/ogreViewer/html/index.html" target="_blank">aqui</a>, ele serve basicamente para carregar uma Mesh no Ogre, iluminar, animar, testar vários materiais nela, checar performance, posicionamento, e outras coisas que é possível fazer com o Ogre. Até agora temos uma aplicação Ogre que carrega uma Mesh, ilumina, possibilita a utilização de materiais customizáveis e deixa a Mesh rotacionando para ver o efeito da luz no material. Já é um começo.<br />
O ambiente de desenvolvimento utilizado (apesar do SVN conter um projeto do tipo Autotools para Linux), é o <a href="http://www.codeblocks.org/" target="_blank">Code::Blocks</a>, pois é um ambiente OpenSource que roda em Windows, Mac e Linux assim como o Ogre (a única grande alteração para rodar um aplicativo é sua inicialização na função main(), que eu não vou tratar aqui, nossos aplicativos são desenvolvidos em Linux).</p>
<p style="text-align: justify;">Bom, antes de mais nada, você pode baixar o código fonte do programa via Subversion, em http://svn.geekvault.org/ogre/greViewer. Caso você não esteja conseguindo compilar o código, provavelmente está faltando alguma biblioteca, a única biblioteca extra que utilizo é a <a href="http://sourceforge.net/projects/ogreal/" target="_blank">OgreAL</a>, um wrapper da <a href="http://connect.creativelabs.com/openal" target="_blank">OpenAL</a> para o Ogre, baixe-a, instale-a e tudo deve funcionar.</p>
<p style="text-align: justify;">Uma vez com o código em mãos, vamos falar um pouco sobre como o Ogre funciona. O Ogre possui uma arquitetura baseada em plugins, e essa é a grande sacada deles, a grande maioria das engines gráficas utilizam apenas uma arquitetura de herança, complicando o código e tirando sua portabilidade. No Ogre, se você precisa de uma cena que utiliza BSP, basta carregar o plugin que permite isso, configurar sua cena para aceitar informações do tipo BSP e você está pronto, detalhe, isso pode ser feito em run-time.<br />
Outra característica importante do Ogre são os Listeners, sendo que o mais importante deles é sem dúvida o FrameListener. Apesar de eu não falar sobre Padrões de Projetos, um Listener é basicamente uma classe que &#8220;ouve&#8221; por mudanças e ações nela e toma suas devidas ações. No caso do FrameListener ele possui duas funções básicas, frameStarted() e frameEnded() executam antes e após cada frame ter sido renderizado, útil para animações e tratamento de inputs <img src='http://www.geekvault.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
Isso tendo falado, já podemos explicar o processo de inicialização, vamos ver a função OgreStartup::go(void)</p>
<blockquote>
<p style="text-align: justify;">
void OgreStartup::go(void){<br />
startLog();<br />
createRoot();<br />
defineResources();<br />
setupRenderSystem();<br />
createRenderWindow();<br />
setupScene();<br />
createCamera();<br />
setupViewport();<br />
initializeResourceGroups();<br />
setupAudioSystem();<br />
setupCEGUI();<br />
setupInputSystem();<br />
createScene();<br />
createFrameListener();<br />
startRenderLoop();<br />
}</p></blockquote>
<p style="text-align: justify;">Ela é intuitiva não? Vamos passo a passo:</p>
<ol>
<li style="text-align: justify;">startLog(). Essa função inicia o log do Ogre</li>
<li>createRoot(). A classe Root do Ogre é a classe que controla o Ogre, precisamos iniciá-la antes de mais nada</li>
<li>defineResources(). Como o Ogre utiliza plugins e recursos externos (Meshs, texturas, particulas, etc), precisamos saber onde eles estão, essa função faz isso e os pré-carrega na memória</li>
<li>setupRenderSystem(). Aqui escolhemos se utilizamos DirectX ou OpenGL.</li>
<li>createRenderWindow(). Uma vez escolhido o sistema de renderização, criamos a nossa janela principal.</li>
<li>setupScene(). Escolhemos o plugin para construir a nossa cena, BSP, genérico, Outdoor, etc.</li>
<li>createCamera(). Criamos uma camera principal para podermos ver a cena.</li>
<li>setupViewport(). A camera precisa de um Viewport para renderizar o que ela vê, aqui criamos esse Viewport default.</li>
<li>initializeResourceGroups(). Lembra dos recursos externos no passo 3? Aqui inicializamos os mesmos na memória da GPU ou do PC.</li>
<li>setupAudioSystem(). Um jogo sem audio é bem chato não? Inicializamos o OgreAL.</li>
<li>setupCEGUI(). Inicializamos a GUI default que o Ogre utiliza.</li>
<li>setupInputSystem(). Inicializamos o OIS para termos ações do teclado, mouse e joystick.</li>
<li>createScene(). Criamos a cena para mostrar, essa função é puramente virtual, já que cada cena é diferente da outra, não temos uma cena única.</li>
<li>createFrameListener(). Cria os Listeners, também é puramente virtual, pois normalmente você terá <em>n</em> Listeners.</li>
<li>startRenderLoop(). Inicia o processo de renderização de cada frame.</li>
</ol>
<p>Por hoje é só, na próxima parte eu vou explicar função por função como ela faz, e na parte 3 irei explicar como criar uma cena básica e um FrameListener básico para podermos movimentar a camera e sair do programa.</p>
<p>Até lá.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geekvault.org/2009/02/ogre-parte-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
