Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Começando com Three.js, renderizando 3D no navegador
baltz
baltz

Posted on

     

Começando com Three.js, renderizando 3D no navegador

Meu objetivo é explicar de forma simples sobre renderização 3D no navegador. Atualmente, há poucos recursos em português sobre o assunto, o que dificulta para quem está começando, mesmo que já tenha alguma afinidade com o tema.

Para começar, a WebGL (Web Graphics Library) é a API padrão para trabalhar com 3D no navegador. Ela é responsável por desenhar pontos, linhas e triângulos, mas para projetos mais complexos, o código pode ficar extenso. Para facilitar e manter a produtividade, utilizamos a biblioteca Three.js, que permite criar cenas, trabalhar com iluminação, materiais, texturas e muito mais.

Uma aplicação com Three.js possui três elementos principais: o Renderer, a Camera e uma Scene.

O Renderer é o componente central da Three.js, responsável por receber e renderizar a Scene e a Camera em um Canvas.

A Scene é mais complexa, permitindo adicionar luzes, texturas, modelos e outros elementos.

Por fim, a Camera define a perspectiva da Scene.

Agora que a estrutura foi explicada, vamos para o código. Nosso objetivo é ter um elemento 3D renderizado no navegador até o final deste artigo. Para isso, precisaremos apenas do Node.js instalado no terminal para baixar os pacotes necessários via npm.

Começamos criando nosso index.html:

<!DOCTYPE html><htmllang="pt-br"><head><metacharset="utf-8"><title>Meu primeiro 3D</title><style>body{margin:0;}</style></head><body><scripttype="module"src="/main.js"></script></body></html>
Enter fullscreen modeExit fullscreen mode

agora vamos criar o nosso arquivo main.js

import*asTHREEfrom'three';
Enter fullscreen modeExit fullscreen mode

Como você percebeu, já estou importando a biblioteca. Agora vamos realizar a instalação de fato usando o npm. Além disso, aproveitaremos para instalar um pacote que nos auxiliará no desenvolvimento local, o vite:

# three.jsnpminstall--save three# vitenpminstall--save-dev vite
Enter fullscreen modeExit fullscreen mode

Agora que o Vite está instalado, podemos iniciar nosso desenvolvimento local. Digite no terminal:

npx vite
Enter fullscreen modeExit fullscreen mode

Com a aplicação rodando localmente, vamos criar nossa primeira cena (Scene). Para começar, adicione um canvas com um ID no nosso HTML:

<!DOCTYPE html><htmllang="pt-br"><head><metacharset="utf-8"><title>Meu primeiro 3D</title><style>body{margin:0;}</style></head><body><canvasid="c"></canvas><scripttype="module"src="/main.js"></script></body></html>
Enter fullscreen modeExit fullscreen mode

Agora que temos nosso canvas, vamos selecioná-lo em nosso arquivo main.js e iniciar um Renderer:

import*asTHREEfrom'three';functionmain(){constcanvas=document.querySelector('#c');constrenderer=newTHREE.WebGLRenderer({antialias:true,canvas});}main()
Enter fullscreen modeExit fullscreen mode

Vamos adicionar a Camera dentro da função main() no arquivo main.js:

constcamera=newTHREE.PerspectiveCamera(75,2,0.1,5);camera.position.z=2;
Enter fullscreen modeExit fullscreen mode

Não vou entrar em detalhes sobre cada objeto da Three.js, mas recomendo fortemente a leitura da documentação. Quanto mais tempo você investir nisso, mais rápido vai entender tudo.

https://threejs.org/docs/#api/en/cameras/PerspectiveCamera

Por fim, vamos adicionar nossa cena (Scene) e dentro dela criar um cubo utilizando as formas geométricas primitivas que a biblioteca Three.js nos oferece.

constscene=newTHREE.Scene();constgeometry=newTHREE.BoxGeometry(1,1,1);constmaterial=newTHREE.MeshBasicMaterial({color:0x44aa88});constcube=newTHREE.Mesh(geometry,material);scene.add(cube);renderer.render(scene,camera);
Enter fullscreen modeExit fullscreen mode

Pronto, se tudo correu bem, agora você tem um Canvas renderizando uma forma 3D no seu navegador. Eu sei, pode não parecer muito, mas a jornada é feita de pequenas vitórias, certo?

No próximo artigo, vamos incorporar iluminação e movimento para obter uma experiência 3D mais realista.

Deixo aqui um link para inspirações:https://threejs.org/examples/#webgl_animation_keyframes

Como mencionei, o objetivo é trazer um conteúdo mais acessível e menos "gourmet" para facilitar a entrada de quem quiser se aventurar.

Espero que tenha gostado! Abaixo está o código final para referência:

index.html

<!DOCTYPE html><htmllang="pt-br"><head><metacharset="utf-8"/><title>Meu primeiro 3D</title><style>body{margin:0;}</style></head><body><canvasid="c"></canvas><scripttype="module"src="/main.js"></script></body></html>
Enter fullscreen modeExit fullscreen mode

main.js

import*asTHREEfrom"three";functionmain(){constcanvas=document.querySelector("#c");constrenderer=newTHREE.WebGLRenderer({antialias:true,canvas});constcamera=newTHREE.PerspectiveCamera(75,2,0.1,5);camera.position.z=2;constscene=newTHREE.Scene();constgeometry=newTHREE.BoxGeometry(1,1,1);constmaterial=newTHREE.MeshBasicMaterial({color:0x44aa88});constcube=newTHREE.Mesh(geometry,material);scene.add(cube);renderer.render(scene,camera);}main();
Enter fullscreen modeExit fullscreen mode

|- > node_modules
|- index.html
|- main.js
|- package-lock.json
|- package.json



Agora vamos deixar nosso projeto mais imersivo?
A segunda parte do nosso artigo já está prontaParte 2

Top comments(2)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss
CollapseExpand
 
arielbetti profile image
Ariel Betti
  • Joined

Muito bom baltz!

CollapseExpand
 
baltz profile image
baltz
Shaping interfaces and experiences. Enthusiastic about Agile, with extensive software engineering background

Valeu meu mano 🤙

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Shaping interfaces and experiences. Enthusiastic about Agile, with extensive software engineering background
  • Location
    Brasil
  • Education
    Bad Education
  • Work
    Tech Lead
  • Joined

More frombaltz

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp