<?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>Blog Fellyph Cintra &#187; métodos</title>
	<atom:link href="http://www.fellyph.com.br/blog/tag/metodos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fellyph.com.br/blog</link>
	<description></description>
	<lastBuildDate>Thu, 12 Jan 2012 21:34:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tutorial PaperVision 3D 2.0</title>
		<link>http://www.fellyph.com.br/blog/flash/tutorial-papervision-3d-20/</link>
		<comments>http://www.fellyph.com.br/blog/flash/tutorial-papervision-3d-20/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 05:09:28 +0000</pubDate>
		<dc:creator>Fellyph</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[3d]]></category>
		<category><![CDATA[actionScprit]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[flash develop]]></category>
		<category><![CDATA[flex sdk]]></category>
		<category><![CDATA[métodos]]></category>
		<category><![CDATA[papervision]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.fellyph.com.br/blog/?p=303</guid>
		<description><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.fellyph.com.br/blog/flash/tutorial-papervision-3d-20/' addthis:title='Tutorial PaperVision 3D 2.0 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div>Olá pessoal nesse post eu vou falar sobre Papervision 3D, ela é uma engine que simula um ambiente 3D dentro do flash com um conjunto de classes que através de calculos gera um ambiente altura, largura e profundidade, diferente do que o flash proporcionava na versão CS3. Lembrando que a nova versão do flash já tem um suporte nativo para 3D.

Atualmente existem várias engines 3D no mercado, sendo Papervision a mais popular. Com essa engine podemos trabalhar com formas como: planos , cubos , cilindros, cones e objetos complexos, exportados por ferramentas 3D, por exemplo, Blender. <a href="http://www.fellyph.com.br/blog/flash/tutorial-papervision-3d-20/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="addthis_toolbox addthis_default_style " addthis:url='http://www.fellyph.com.br/blog/flash/tutorial-papervision-3d-20/' addthis:title='Tutorial PaperVision 3D 2.0 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_button_google_plusone" g:plusone:size="medium"></a><a class="addthis_counter addthis_pill_style"></a></div><p>Olá pessoal nesse post eu vou falar sobre Papervision 3D(obs. esse post está em rascunho desde o ano passado), ela é uma engine que simula um ambiente 3D dentro do flash com um conjunto de classes que através de cálculos gera um ambiente altura, largura e profundidade.Mas lembrando que a nova versão do flash já tem um suporte nativo para 3D.</p>
<p>Atualmente existem várias engines 3D no mercado, sendo Papervision a mais popular. Com essa engine podemos trabalhar com formas como: planos , cubos , cilindros, cones e objetos complexos, exportados por ferramentas 3D, por exemplo, Blender.</p>
<p>Mais informações no site do projeto no google code: <a href="http://code.google.com/p/papervision3d/" target="_blank">http://code.google.com/p/papervision3d/</a></p>
<p>Blog oficial: <a href="http://blog.papervision3d.org/" target="_blank">http://blog.papervision3d.org/</a></p>
<p>Um exemplo no site : <a href="http://www.papervision3d.org/" target="_blank">http://www.papervision3d.org/</a></p>
<p>Vamos começar de leve, para esse tutorial será necessário baixar a versão 2.0 do papervision, no site : <a href="http://papervision3d.googlecode.com/files/Papervision3D_2.0_beta_1_src.zip" target="_blank">http://papervision3d.googlecode.com/files/Papervision3D_2.0_beta_1_src.zip</a></p>
<p>Descompacte o zip, o aqui contém uma pasta chamada src, dentro dessa pasta tem os seguintes arquivos :</p>
<p><img class="alignnone size-full wp-image-337" title="print-paper-vision" src="http://www.fellyph.com.br/blog/wp-content/uploads/2008/11/print-paper-vision.gif" alt="" width="450" height="281" /></p>
<p>Como na imagem a cima a pasta src possui as seguintes pastas nochump e org.</p>
<p>Copie a pasta &#8220;org&#8221; para o local do seu projeto. (no meu caso criei uma pasta papervision e em seguida criei um projeto com o flash Develop).</p>
<p><img class="alignnone size-full wp-image-342" title="print-paper-vision-2" src="http://www.fellyph.com.br/blog/wp-content/uploads/2008/11/print-paper-vision-2.gif" alt="" width="450" height="281" /></p>
<p>Para compilar o código eu vou utilizar flash develop + flex SDK que você pode ver o <a href="http://www.fellyph.com.br/blog/tutoriais/flash-develop-flex-sdk/">tutorial como utilizar aqui</a>, se tudo der certo o flash develop irá reconhecer as classes do paperVision, crie uma classe chama Main e vamos ao código:</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package  <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	* ...
	* @author Fellyph Cintra fellyph.com.br/blog/
	*/</span>
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">//Classes necessárias para trabalhar com 3D</span>
	<span style="color: #808080; font-style: italic;">//em termos de visualização</span>
&nbsp;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">view</span>.<span style="color: #006600;">Viewport3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">render</span>.<span style="color: #006600;">BasicRenderEngine</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">//objeto a ser utilizado</span>
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">objects</span>.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">Sphere</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">// o Material a ser aplicado no objeto 3d</span>
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">materials</span>.<span style="color: #006600;">WireframeMaterial</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Main <span style="color: #0066CC;">extends</span> Sprite <span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// para criar um ambiente 3D precisamos desses três elementos para</span>
                <span style="color: #808080; font-style: italic;">//visualização de de nosso ambiente, resumindo :</span>
                <span style="color: #808080; font-style: italic;">// Viewport é responsável pela área que irá ser exibida</span>
                <span style="color: #808080; font-style: italic;">// Scene3D é responsável pelos objetos 3d aplicados na tela</span>
                <span style="color: #808080; font-style: italic;">// Camara3D será nossa visão do ambiente 3d</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _viewport		:Viewport3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _cena			:Scene3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _camera		:Camera3D;
&nbsp;
		<span style="color: #808080; font-style: italic;">// BasicRenderEngine cuidará da renderização de nosso ambiente.</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _renderizador 	:BasicRenderEngine;
&nbsp;
                <span style="color: #808080; font-style: italic;">//Sphere é nosso objeto primitivo 3D</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> esfera 			:Sphere;
&nbsp;
                <span style="color: #808080; font-style: italic;">// WireframeMaterial é camada do objeto primitivo ou seja nossa Textura</span>
                <span style="color: #808080; font-style: italic;">// WireframeMaterial é um dos materiais mais simples do paperVision são</span>
                <span style="color: #808080; font-style: italic;">// apenas linhas que contornam os vértices do meu objeto.</span>
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> material		        :WireframeMaterial;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
			_viewport = <span style="color: #000000; font-weight: bold;">new</span> Viewport3D<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">450</span>, <span style="color: #cc66cc;">300</span>, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
			addChild<span style="color: #66cc66;">&#40;</span>_viewport<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			_cena 			= <span style="color: #000000; font-weight: bold;">new</span> Scene3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_camera 		= <span style="color: #000000; font-weight: bold;">new</span> Camera3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_renderizador 	= <span style="color: #000000; font-weight: bold;">new</span> BasicRenderEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			material = <span style="color: #000000; font-weight: bold;">new</span> WireframeMaterial<span style="color: #66cc66;">&#40;</span>0x330000<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			esfera = <span style="color: #000000; font-weight: bold;">new</span> Sphere<span style="color: #66cc66;">&#40;</span>material, <span style="color: #cc66cc;">80</span>, <span style="color: #cc66cc;">6</span>, <span style="color: #cc66cc;">6</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			_cena.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>esfera<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			_renderizador.<span style="color: #006600;">renderScene</span><span style="color: #66cc66;">&#40;</span>_cena, _camera, _viewport<span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Para que não esta ambientado com POO, vou fazer um resumo bem &#8220;Basicão&#8221;:</p>
<ol>
<li>Na primeira linha definimos o pacote que a classe está &#8220;package  {&#8221; nesse caso a classe está na raiz do projeto.</li>
<li>Importamos as classes necessárias</li>
<li>Iniciamos nossa classe &#8221; public class Main extends Sprite { &#8220;</li>
<li>Definimos nossos atributos</li>
<li>Iniciamos nosso construtor (o construtor é o primeiro método a ser executado em uma classe) &#8220;public function Main() {&#8220;</li>
</ol>
<p>Para esse tutorial para ficar simples eu joguei todas as operações dentro do construtor, para entender melhor vamos ver o passo-a-passo de nosso construtor:</p>
<ul>
<li>Primeiro criamos um novo Viewport3D, passamos como parâmetro ( largura:Number, altura:Number, autosize:Boolean e interatividade:Boolean ), existem outros parâmetros, mas não serão abordados nesse tutorial.</li>
<li>Adicionamos o Viewport no palco.</li>
<li>Instânciamos novos _renderizador, _cena e _camera.</li>
<li>Criamos um novo material e passamos com parâmetro a cor.</li>
<li>A instancimos uma nova esfera Objeto do tipo Sphere , para isso são necessário os parâmetros, o material , o raio da esfera, e a quantidade de segmentos horizontais e verticais</li>
<li>Adicionamos a esfera na _cena</li>
<li>por fim renderizamos nosso ambiente</li>
</ul>
<p>Nesse esquema utilizado o nosso ambiente será renderizado apenas uma vez o resultado podemos ver abaixo:</p>
<p><object type="application/x-shockwave-flash" data="http://www.fellyph.com.br/blog/wp-content/uploads/2009/03/teste22.swf" width="450" height="300" class="embedflash"><param name="movie" value="http://www.fellyph.com.br/blog/wp-content/uploads/2009/03/teste22.swf" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><small>(Please open the article to see the flash file or player.)</small></object></p>
<p>Diferente do modelo acima o legal é dar movimento aos objetos, nesse caso precisamos  renderizar o nosso ambiente varias vezes, para isso utilizamos o Evento ENTER_FRAME, então, vamos ao código :</p>

<div class="wp_syntax"><table><tr><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
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">package  <span style="color: #66cc66;">&#123;</span>
&nbsp;
	<span style="color: #808080; font-style: italic;">/**
	* ...
	* @author Fellyph Cintra fellyph.com.br/blog/
	*/</span>
&nbsp;
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">//Classes necessárias para trabalhar com 3D</span>
	<span style="color: #808080; font-style: italic;">//em termos de visualização</span>
&nbsp;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">view</span>.<span style="color: #006600;">Viewport3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">render</span>.<span style="color: #006600;">BasicRenderEngine</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">scenes</span>.<span style="color: #006600;">Scene3D</span>;
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">cameras</span>.<span style="color: #006600;">Camera3D</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">//objeto a ser utilizado</span>
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">objects</span>.<span style="color: #006600;">primitives</span>.<span style="color: #006600;">Sphere</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">// o Material a ser aplicado no objeto 3d</span>
	<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">papervision3d</span>.<span style="color: #006600;">materials</span>.<span style="color: #006600;">WireframeMaterial</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">//importamos o Event para utilizar o ENTER_FRAME</span>
	<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
&nbsp;
	<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Main <span style="color: #0066CC;">extends</span> Sprite <span style="color: #66cc66;">&#123;</span>
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _viewport		:Viewport3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _cena			:Scene3D;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _camera		:Camera3D;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _renderizador 	:BasicRenderEngine;
&nbsp;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> esfera 			:Sphere;
		<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> material		:WireframeMaterial;
&nbsp;
&nbsp;
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Main<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
			_viewport = <span style="color: #000000; font-weight: bold;">new</span> Viewport3D<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">450</span>, <span style="color: #cc66cc;">300</span>, <span style="color: #000000; font-weight: bold;">false</span>, <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>;
			addChild<span style="color: #66cc66;">&#40;</span>_viewport<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			_cena 			= <span style="color: #000000; font-weight: bold;">new</span> Scene3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_camera 		= <span style="color: #000000; font-weight: bold;">new</span> Camera3D<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
			_renderizador 	= <span style="color: #000000; font-weight: bold;">new</span> BasicRenderEngine<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			material = <span style="color: #000000; font-weight: bold;">new</span> WireframeMaterial<span style="color: #66cc66;">&#40;</span>0x330000<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			esfera = <span style="color: #000000; font-weight: bold;">new</span> Sphere<span style="color: #66cc66;">&#40;</span>material, <span style="color: #cc66cc;">80</span>, <span style="color: #cc66cc;">7</span>, <span style="color: #cc66cc;">7</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			_cena.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>esfera<span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">//adicionamos o Evento ENTER_FRAME</span>
			addEventListener<span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">ENTER_FRAME</span>, render<span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
		<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			esfera.<span style="color: #006600;">rotationY</span> += <span style="color: #cc66cc;">2</span>;
			_renderizador.<span style="color: #006600;">renderScene</span><span style="color: #66cc66;">&#40;</span>_cena, _camera, _viewport<span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
&nbsp;
	<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Vamos lá a diferença para o modelo anterior é que, aumentei o número de segmentos da esfera para ficar visualmente melhor e adicionamos um evento ENTER_FRAME que chama o método &#8220;render&#8221; que faz duas coisas simples incrementa o rotationY e renderiza nosso ambiente a cada vez que o método é chamado.</p>
<p>O Resultado é o seguinte :</p>
<p><object type="application/x-shockwave-flash" data="http://www.fellyph.com.br/blog/wp-content/uploads/2009/03/teste2.swf" width="450" height="300" class="embedflash"><param name="movie" value="http://www.fellyph.com.br/blog/wp-content/uploads/2009/03/teste2.swf" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><small>(Please open the article to see the flash file or player.)</small></object></p>
<p>Próximo tutorial vou falar mais um pouco sobre papervision.</p>
<p>Quando comecei a reescrever esse post era dia 30 de março, aniversário do meu amigo André Ponce, Parceiro sempre ajudando quando possível, terminei de escrever 2 horas do dia 31 março, foi mau ai Ponce. Parabéns atrasado.</p>
<p>Até breve&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fellyph.com.br/blog/flash/tutorial-papervision-3d-20/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

