Apidog

Plataforma Colaborativa All-in-one para Desenvolvimento de API

Design de API

Documentação de API

Depuração de API

Mock de API

Testes Automatizados de API

Tutorial de Three.js: Um Guia para Iniciantes

@apidog

@apidog

Updated on abril 2, 2025

Three.js é uma das bibliotecas JavaScript mais populares para criar gráficos 3D em navegadores da web. Construída sobre o WebGL, simplifica o processo de criação e exibição de gráficos computadorizados 3D animados em um navegador da web, sem exigir que você aprenda WebGL de baixo nível. Se você está querendo criar visualizações interativas, jogos ou experiências imersivas na web, o Three.js fornece as ferramentas necessárias para dar vida às suas ideias.

Antes de começarmos o desenvolvimento com o Three.js, considere experimentar o Apidog como uma alternativa ao Postman para suas necessidades de teste de API. O Apidog oferece uma interface intuitiva com recursos poderosos para desenvolvimento, teste e documentação de API - tudo isso sem a quantidade excessiva de recursos que muitos usuários acham frustrante no Postman. É uma excelente ferramenta auxiliar ao desenvolver aplicações web que interagem com APIs.

botão

Agora, vamos iniciar nossa jornada no Three.js!

1. Configurando Seu Ambiente

Instalação

Existem várias maneiras de incluir o Three.js em seu projeto:

Opção 1: Usando npm (Recomendado)

npm install three

Então, importe-o em seu arquivo JavaScript:

import * as THREE from 'three';

Opção 2: Usando um CDN

Adicione isso ao seu arquivo HTML:

<script src="https://cdn.jsdelivr.net/npm/three@0.157.0/build/three.min.js"></script>

Opção 3: Baixar e incluir localmente

Baixe a biblioteca do site do Three.js e inclua-a em seu HTML:

<script src="path/to/three.min.js"></script>

Estrutura do Projeto

Para um projeto básico do Three.js, você precisará:

pasta-do-projeto/
├── index.html
├── style.css
└── script.js

Seu arquivo index.html deve incluir:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Meu App Three.js</title>
    <style>
        body { margin: 0; }
        canvas { display: block; }
    </style>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/three@0.157.0/build/three.min.js"></script>
    <script src="script.js"></script>
</body>
</html>

2. Compreendendo os Fundamentos

O Three.js opera com alguns conceitos-chave que são essenciais para entender:

Os Componentes Principais

  1. Cena: Pense nisso como um contêiner que abriga todos os seus objetos, luzes e câmeras.
  2. Câmera: Define qual parte da cena é visível (seu ponto de vista).
  3. Renderizador: Desenha o que a câmera vê na sua tela.
  4. Objetos (Malhas): Os objetos 3D em sua cena, tipicamente compostos de geometria e material.
  5. Luzes: Fontes de iluminação para sua cena.

Criando Sua Primeira Cena

Aqui está um exemplo básico para criar um cubo giratório:

// Criar a cena
const scene = new THREE.Scene();

// Criar uma câmera
const camera = new THREE.PerspectiveCamera(
    75,                                     // Campo de visão
    window.innerWidth / window.innerHeight, // Proporção
    0.1,                                    // Plano de recorte próximo
    1000                                    // Plano de recorte distante
);
camera.position.z = 5;

// Criar o renderizador
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// Criar um cubo
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

// Loop de animação
function animate() {
    requestAnimationFrame(animate);

    // Rotacionar o cubo
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.01;

    renderer.render(scene, camera);
}
animate();

3. Tornando seu App Responsivo

Para garantir que sua aplicação Three.js fique boa em todos os dispositivos, você precisa lidar com o redimensionamento da janela:

// Lidar com o redimensionamento da janela
window.addEventListener('resize', () => {
    const width = window.innerWidth;
    const height = window.innerHeight;

    // Atualizar renderizador
    renderer.setSize(width, height);

    // Atualizar câmera
    camera.aspect = width / height;
    camera.updateProjectionMatrix();
});

4. Adicionando Materiais e Iluminação

As cenas básicas são apenas o começo. Vamos melhorar a qualidade visual com materiais e luzes:

Materiais

// Material padrão com reflexão
const material = new THREE.MeshStandardMaterial({
    color: 0x0088ff,       // Cor azul
    roughness: 0.5,        // Um pouco brilhante
    metalness: 0.5,        // Um pouco metálico
});

// Material Phong para superfícies brilhantes simples
const phongMaterial = new THREE.MeshPhongMaterial({
    color: 0xff0000,       // Cor vermelha
    shininess: 100,        // Muito brilhante
    specular: 0x111111     // Cor do brilho especular
});

Luzes

// Adicionar luz ambiente
const ambientLight = new THREE.AmbientLight(0x404040);
scene.add(ambientLight);

// Adicionar luz direcional (como o sol)
const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(1, 1, 1);
scene.add(directionalLight);

// Adicionar luz pontual (como uma lâmpada)
const pointLight = new THREE.PointLight(0xffffff, 1, 100);
pointLight.position.set(10, 10, 10);
scene.add(pointLight);

5. Criando Diferentes Geometrias

O Three.js vem com muitas geometrias integradas:

// Esfera
const sphereGeometry = new THREE.SphereGeometry(1, 32, 32);
const sphere = new THREE.Mesh(sphereGeometry, material);
sphere.position.x = -3;
scene.add(sphere);

// Cilindro
const cylinderGeometry = new THREE.CylinderGeometry(1, 1, 2, 32);
const cylinder = new THREE.Mesh(cylinderGeometry, material);
cylinder.position.x = 0;
scene.add(cylinder);

// Toróide (donut)
const torusGeometry = new THREE.TorusGeometry(0.8, 0.3, 16, 100);
const torus = new THREE.Mesh(torusGeometry, material);
torus.position.x = 3;
scene.add(torus);

6. Criando Texto em Three.js

Texto pode ser adicionado à sua cena usando o TextGeometry:

// Primeiro, carregue a fonte
const loader = new THREE.FontLoader();
loader.load('https://threejs.org/examples/fonts/helvetiker_regular.typeface.json', function(font) {
    const textGeometry = new THREE.TextGeometry('Olá Three.js!', {
        font: font,
        size: 0.5,
        height: 0.1,
        curveSegments: 12,
        bevelEnabled: true,
        bevelThickness: 0.03,
        bevelSize: 0.02,
        bevelOffset: 0,
        bevelSegments: 5
    });

    const textMaterial = new THREE.MeshStandardMaterial({ color: 0xffff00 });
    const text = new THREE.Mesh(textGeometry, textMaterial);

    // Centralizar o texto
    textGeometry.computeBoundingBox();
    const textWidth = textGeometry.boundingBox.max.x - textGeometry.boundingBox.min.x;
    text.position.x = -textWidth / 2;

    scene.add(text);
});

7. Desenhando Linhas

Você pode criar linhas no Three.js para wireframes ou visualização de trajetórias:

// Criar pontos para a linha
const points = [];
points.push(new THREE.Vector3(-2, 0, 0));
points.push(new THREE.Vector3(0, 2, 0));
points.push(new THREE.Vector3(2, 0, 0));

// Criar a geometria da linha
const lineGeometry = new THREE.BufferGeometry().setFromPoints(points);

// Criar material
const lineMaterial = new THREE.LineBasicMaterial({ color: 0xffffff });

// Criar a linha
const line = new THREE.Line(lineGeometry, lineMaterial);
scene.add(line);

8. Interação e Controles

Para permitir que os usuários interajam com sua cena 3D, você pode adicionar controles:

// Importar OrbitControls
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

// Criar controles
const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true; // Adicionar efeito de amortecimento suave
controls.dampingFactor = 0.05;

// Atualizar o loop de animação
function animate() {
    requestAnimationFrame(animate);
    
    // Atualizar controles
    controls.update();
    
    renderer.render(scene, camera);
}

9. Carregando Modelos 3D

Você pode importar modelos criados em softwares como Blender:

import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';

const loader = new GLTFLoader();
loader.load(
    'path/to/model.gltf',
    // Chamado quando carregado
    function(gltf) {
        scene.add(gltf.scene);
    },
    // Chamado durante o carregamento
    function(xhr) {
        console.log((xhr.loaded / xhr.total * 100) + '% carregado');
    },
    // Chamado em caso de erro
    function(error) {
        console.error('Ocorreu um erro', error);
    }
);

10. Dicas de Depuração e Performance

Painel de Estatísticas

import Stats from 'three/examples/jsm/libs/stats.module.js';

const stats = new Stats();
document.body.appendChild(stats.dom);

function animate() {
    requestAnimationFrame(animate);
    stats.begin();
    
    // Seu código de animação aqui
    
    stats.end();
    renderer.render(scene, camera);
}

Dicas de Performance

  1. Use BufferGeometry em vez de Geometry (que está obsoleto)
  2. Reutilize materiais e geometrias sempre que possível
  3. Defina renderer.powerPreference = 'high-performance' para melhor uso da GPU
  4. Use Object3D.frustumCulled = true para ocultar objetos fora do campo de visão da câmera
  5. Otimize a complexidade do modelo utilizando menos polígonos quando possível

Conclusão

Você agora aprendeu o básico do Three.js, desde a configuração do seu ambiente até a criação de cenas 3D interativas. Isso é apenas o começo—o Three.js oferece uma vasta gama de recursos para criar experiências web 3D impressionantes.

Para aprofundar seu conhecimento, explore a documentação oficial do Three.js e a galeria de exemplos. A comunidade também está ativa em fóruns e GitHub, fornecendo recursos e suporte para desenvolvedores de todos os níveis.

Lembre-se, a melhor maneira de aprender é experimentando. Comece com projetos simples e gradualmente avance para cenas mais complexas. Com prática e paciência, você estará criando experiências web 3D impressionantes em pouco tempo!

Divirta-se codificando com o Three.js!

botão