Papervision 3D - Cube

April 8th, 2008  | Tags:

Vamo lá, primeiro vamos organizar nossa pasta onde vai ficar o FLA. baixe essas classes aqui (serão necessárias para funcionar o arquivo). Agora dezipe os arquivos no diretório que você vai por o FLA.

Depois disso crie uma ou seis imagens com 200 x 200 pixels, eu deixei apenas uma imagem, mas é bom você fazer com 6 diferentes.

Ok, agora vamos ao flash, importe as imagens e transforme-as em MovieClip, na barra properties de cada MovieClip ponha o instance name de “face”, “face2″, “face3″, “face4″, “face5″ e “face6″, sem as aspas.

Ainda na barra de properties defina o blend como “Erase” para todos os MovieClips. e deixe-os no palco mesmo.

Agora vamos ao nosso código

View CodeACTIONSCRIPT
 
// importanto classes para o filme principal
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.special.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.materials.shaders.*;
import org.papervision3d.materials.utils.*;
import org.papervision3d.lights.*;
import org.papervision3d.render.*;
import org.papervision3d.view.*;
import org.papervision3d.events.*;
import org.papervision3d.core.utils.*;
import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
 
// definindo nosso viewport
var viewport:Viewport3D = new Viewport3D(0, 0, true, true);
// adicionando o viewport
addChild(viewport);
viewport.buttonMode = true;
// definindo o renderizador
var renderer:BasicRenderEngine = new BasicRenderEngine();
// definindo o palco 3d
var scene:Scene3D = new Scene3D();
// definindo camera
var camera:Camera3D = new Camera3D();
camera.zoom = 11;
camera.focus = 100;
// definindo nosso movieclip para adicionar os MCS como material do cubo
var mam:MovieMaterial = new MovieMaterial(face);
mam.interactive = true;
mam.smooth = true;
mam.animated = true;
 
var mam2:MovieMaterial = new MovieMaterial(face2);
mam2.interactive = true;
mam2.smooth = true;
mam2.animated = true;
 
var mam3:MovieMaterial = new MovieMaterial(face3);
mam3.interactive = true;
mam3.smooth = true;
mam3.animated = true;
 
var mam4:MovieMaterial = new MovieMaterial(face4);
mam4.interactive = true;
mam4.smooth = true;
mam4.animated = true;
 
var mam5:MovieMaterial = new MovieMaterial(face5);
mam5.interactive = true;
mam5.smooth = true;
mam5.animated = true;
 
var mam6:MovieMaterial = new MovieMaterial(face6);
mam6.interactive = true;
mam6.smooth = true;
mam6.animated = true;
// pegando as vars definidas e jogando na lista de materiais do cubo
var cube:Cube = new Cube(new MaterialsList({front:mam, back:mam2, left:mam3, right:mam4,top:mam5, bottom:mam6}), 200, 200, 200, 10, 10, 10);
scene.addChild(cube);
// adicionando o evento loop para movimentação do quadrado
addEventListener(Event.ENTER_FRAME, loop);
// funcção do loop
function loop(e:Event):void
{
var xDist:Number = mouseX - stage.stageWidth * 0.5;
var yDist:Number = mouseY - stage.stageHeight * 0.5;
cube.rotationY += xDist * 0.05;
cube.rotationX += -yDist * 0.05;
renderer.renderScene(scene, camera, viewport);
}
// definindo clique para cada lado do quadrado
face.addEventListener(MouseEvent.CLICK, faceClick);
 
function faceClick(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face2.addEventListener(MouseEvent.CLICK, face2Click);
 
function face2Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face3.addEventListener(MouseEvent.CLICK, face3Click);
 
function face3Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face4.addEventListener(MouseEvent.CLICK, face4Click);
 
function face4Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face5.addEventListener(MouseEvent.CLICK, face5Click);
 
function face5Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}
 
face6.addEventListener(MouseEvent.CLICK, face6Click);
 
function face6Click(e:MouseEvent):void
{
navigateToURL(new URLRequest("http://www.marceloduende.com.br"));
}

Agora compile seu filme e brinque a vontade :)

Para baixar o arquivo acima clique aqui

  1. Visiion
    June 1st, 2008 at 17:47
    Reply | Quote | #1

    EXCELENTE!!

    Muito bom o artigo muito obrigada :D
    já agora se eu quiser 2 Links ou mais, por face do cubo, alguém sabe como fazer? Agradecia algum tipo de ajuda Obrigada.

  2. Visiion
    June 1st, 2008 at 18:07
    Reply | Quote | #2

    já agora, como reduzo a velocidade do cubo?

  3. Marcelo Duende
    July 10th, 2008 at 14:17
    Reply | Quote | #3

    Visiion, para botar dois links

    function faceClick(e:MouseEvent):void
    {
    navigateToURL(new URLRequest(”http://www.marceloduende.com.br”));
    navigateToURL(new URLRequest(”http://www.marceloduende.com.br”));
    }

    só adicionar um por função dai irá para duas páginas que você escolher.

    Para diminuir a velocidade do cubo é só mudar os valores na função loop

    function loop(e:Event):void
    {
    var xDist:Number = mouseX - stage.stageWidth * 0.5;
    var yDist:Number = mouseY - stage.stageHeight * 0.5;
    cube.rotationY += xDist * 0.01;
    cube.rotationX += -yDist * 0.01;
    renderer.renderScene(scene, camera, viewport);
    }

  4. kaná
    March 12th, 2009 at 12:40
    Reply | Quote | #4

    Olá Marcelo… te encontrei por acaso. Parabéns! Foi um dos melhores achados da minha ida e vinda na internet. Você é o cara! Sem palavras.

  5. Tk
    April 6th, 2009 at 22:39
    Reply | Quote | #5

    Olá Marcelo tudo bem?!
    Gostei muito do tuto, estou iniciando meus estudos com paper, queria saber no caso de usar a movimentação do cubo para criar a navegação de um site, e queria saber se tem como o cubo aparecer na Face1, aí quando voce clicar em qualquer area da primeira face ele vai pra face2 e assim em diante?!
    Vlw ótimo tutorial!

  6. April 24th, 2009 at 00:50
    Reply | Quote | #6

    Nossa tentei vários e nenhum tinha ficado tão perfeito e fácil, igual ao seu Marcelo.
    obrigado por compartilhar.

  7. Tigger
    November 16th, 2009 at 16:04
    Reply | Quote | #7

    Marcelo

    vlw mesmo … 2 dias full time na net caçando um … o seu éo melhor !

TOP