Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Conheça os tipos de registros DNS: o guia completo sobre A, AAAA, NS, CNAME, MX, PTR, SOA, TXT, SRV, SPF e muito mais
    • Cache além do básico: por que LRU e TTL precisam andar juntos
    • Quando usar arquitetura modular — e quando não usar
    • Mais de 200 livros de programação gratuitos em português
    • System Design: da teoria à prática
    • Pessoas e Processos: o fator humano por trás da arquitetura de sistemas
    • Observabilidade e Operações: dando olhos e mãos ao sistema
    • Performance e Custo: otimizando o que realmente importa
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Dicas»Apresentando figuras 3D com Javascript

    Apresentando figuras 3D com Javascript

    Jhonathan SoaresBy Jhonathan Soares18 de maio de 20142 Mins Read Dicas
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    Após visitar alguns sites, e finalmente cair de paraquedas nessa linda biblioteca threejs.org, vi que a internet me surpreende a cada dia.

    A proposta da biblioteca é :

    O objetivo do projeto é criar uma biblioteca 3D leve, com um baixo nível de complexidade – em outras palavras, para iniciantes. A biblioteca oferece <canvas>, <svg>, CSS3D e renderizadores WebGL .

    Em outras palavras, você pode fazer um monte de coisas legais em 3D com javascript rodando do lado do cliente sem necessidade de processamento gráfico pesado!

    Veja uma imagem do que eu fiz aqui :

    cubo 3D

    Não entendeu ainda o que eu quis diz dizer? Veja um live demo aqui

    Viu que maneiro?

    Que tal aprender a fazer um desses? Vamos lá?

    O código resumidamente é bastante simples, vamos a nossa página HTML :

    
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="pt" lang="pt">
        
    <meta http-equiv="content-type" content="text/html;charset=utf-8" /><!-- /Added by HTTrack -->
    <head>
            <title>Cubo 3D</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
            <!-- Js -->        
            <script src="../Content/js/jquery-1.10.1.min.js"></script>  
        	<script src="../Content/js/canvas.js"></script>
    	    <script src="../Content/js/three.js"></script>
        </head>
        <body style="background:#333;">
    
    	<div id="main"> 
    		<section class="cubo">
    			<div id="cubo-canvas"></div>
    		</section>
        </div>
    </html>
    
    

    Você pode perceber que temos apenas 3 arquivos, a bilbioteca Jquery, nosso arquivo de configuração Canvas.js e a biblioteca 3D Three.js

    Vamos dar uma olhada no código do nosso arquivo de configuração:

    $(function () {
        
        //cria elemento canvas do html5
        var canvasEl = document.createElement('canvas');
        if (!canvasEl.getContext || $(window).width() < 479) {
            $("#cubo-canvas").append('<img src="../Content/img/cubo.png" alt="Cubo 3D" />');
            return;
        }
    
    	//instancia as variáveis necessárias
        var camera, scene, renderer, cubo;
    
        var targetRotationX = 0;
        var targetRotationY = 0;
    
        var targetRotationOnMouseDownX = 0;
        var targetRotationOnMouseDownY = 0;
    
        var mouseX = 0;
        var mouseY = 0;
    
        var mouseXOnMouseDown = 0;
        var mouseYOnMouseDown = 0;
    
    	//define tamanho
        var canvasWidth = 390;
        var canvasHeight = 390;
    
    	//define o eixo
        var canvasHalfX = canvasWidth / 2;
        var canvasHalfY = canvasHeight / 2;
    
    	//define o inicio
        window.requestAF = function () {
            return (
                window.requestAnimationFrame ||
                window.webkitRequestAnimationFrame ||
                window.mozRequestAnimationFrame ||
                window.oRequestAnimationFrame ||
                window.msRequestAnimationFrame ||
                function (callback) {
                    window.setTimeout(callback, 1000 / 60);
                }
            );
        } ();    
    
    	//inicia a figura
        init();
    	//incia a renderizaçao e animação
        animate();
    
    
    	//cria o elemento
        function init() {
            var container = document.getElementById("cubo-canvas");
    
    		//posicao de camera
            camera = new THREE.Camera(53, canvasWidth / canvasHeight, 1, 1000);
            camera.position.y = 150;
            camera.position.z = 500;
            camera.target.position.y = 150;
    
    		//define um cenário
            scene = new THREE.Scene();
    
    		//define as "faces" do cubo ( você pode fazer um dado! ) 
            var materiais = [
                new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture("../Content/img/cubo.jpg") }), // Left side
                new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture("../Content/img/cubo.jpg") }), // Right side
                new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture("../Content/img/cubo.jpg") }), // Top side
                new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture("../Content/img/cubo.jpg") }), // Bottom side
                new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture("../Content/img/cubo.jpg") }), // Front side
                new THREE.MeshBasicMaterial({ map: THREE.ImageUtils.loadTexture("../Content/img/cubo.jpg") }) // Back side
            ];
    
            //define o cubo
            cubo = new THREE.Mesh(new THREE.Cube(260, 260, 260, 4, 4, 4, materiais), new THREE.MeshFaceMaterial());
            cubo.position.y = 150;
    
    		//adiciona o cubo na cena
            scene.addObject(cubo);
    
    		//renderiza
            renderer = new THREE.CanvasRenderer();
            renderer.setSize(canvasWidth, canvasHeight);
            container.appendChild(renderer.domElement);
            container.addEventListener('mousemove', onMouseMove, false);
        }
    
    	//velocidade do cubo em relaçao ao mouse
        function onMouseMove(event) {
            mouseX = event.clientX - canvasHalfX;
            mouseY = event.clientY - canvasHalfY;
            targetRotationX = targetRotationOnMouseDownX + (mouseX - mouseXOnMouseDown) * 0.02;
            targetRotationY = targetRotationOnMouseDownY + (mouseY - mouseYOnMouseDown) * 0.002;
        }
    
        function animate() {
            requestAF(animate);
            render();
        }
    	//velocidade de renderizaçao
        function render() {
            cubo.rotation.x += (targetRotationY - cubo.rotation.x) * 0.05;
            cubo.rotation.y += (targetRotationX - cubo.rotation.y) * 0.05;
    
            renderer.render(scene, camera);
        }
    });
    

    Ufa! Muitos detalhezinhos, mas nada que seja complicado de entender.

    E pronto! Nosso cubo está funcionando.

    Você pode baixar todo o projeto cubo3d, para estudar melhor.

    Não esqueça de conferir ótimos exemplos aqui: http://threejs.org/

    Ah, que tal dar aquela curtida na nossa Fã Page?

     

    3d html5 js
    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    Conheça os tipos de registros DNS: o guia completo sobre A, AAAA, NS, CNAME, MX, PTR, SOA, TXT, SRV, SPF e muito mais

    Dicas 8 de outubro de 20257 Mins Read

    Mais de 200 livros de programação gratuitos em português

    Cursos Dicas 16 de setembro de 202511 Mins Read

    Happy Hour com Dados #17 – Azure vs AWS vs GCP

    Front-End 26 de maio de 20211 Min Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • Conheça os tipos de registros DNS: o guia completo sobre A, AAAA, NS, CNAME, MX, PTR, SOA, TXT, SRV, SPF e muito mais
    • Cache além do básico: por que LRU e TTL precisam andar juntos
    • Quando usar arquitetura modular — e quando não usar
    • Mais de 200 livros de programação gratuitos em português
    • System Design: da teoria à prática
    Categorias
    • Arquitetura (29)
      • Microsserviços (3)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (93)
      • NoSql (60)
      • Sql (38)
    • Boas práticas (33)
      • Gestão & Produtividade (3)
      • Metodologias Ágeis (6)
    • Cursos (53)
    • Dicas (107)
    • Front-End (92)
    • IA (4)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Testes
    28 de fevereiro de 20254 Mins Read

    30 APIs Gratuitas para desenvolvedores

    APIs são ferramentas essenciais para desenvolvedores que querem criar aplicações mais eficientes, conectadas e funcionais sem reinventar a roda. Desde dados abertos, notícias em tempo real e inteligência artificial até esportes e clima, há APIs gratuitas que oferecem vastas possibilidades de integração. Este artigo apresenta 30 APIs gratuitas que podem acelerar o desenvolvimento e abrir novas oportunidades para projetos inovadores.

    1000 livros gratuitos sobre programação!

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile