Capítulo 30
Anti-aliasing e imagem final
2 min de leitura 376 palavras 1 gravura
Várias amostras por pixel com jitter reduzem serrilhado. Pode demorar — paciência.
Trabalhe sobre uma cópia da pasta inicio do exemplo correspondente. Leia, digite, mude uma coisa, preveja, recarregue e confira. A referência completa fica na raiz da pasta do exemplo, no pacote anexo.
O que você pratica
- samples > 1?
- Math.random no u,v?
- Botão Renderizar?

Comparar 1 vs 4
Renderize com 1 e com 4 amostras. Bordas ficam menos “escada”.
Erro comum: samples alto demais trava o navegador — vá aos poucos.
Loop de amostras
No início o loop força 1. Use samples.
for (let s = 0; s < samples; s++) {
const u = ((i + Math.random()) / (W - 1)) * 2 - 1;
}
Pare e experimente. Status confirma o fim.
Entrega visual
Salve um print se quiser o portfólio.
Não publique exercícios com dados reais. Conteúdo fictício de Recife.
Como o exemplo desta etapa funciona
A referência desta etapa reúne app.js, index.html, styles.css. Abra o resultado pronto, localize o trecho que produz anti-aliasing e imagem final e só então compare com inicio. Os dois diretórios são independentes: você pode errar, restaurar e repetir sem buscar arquivos de outro capítulo.
Leitura do resultado
Observe primeiro o que permanece parado e o que responde a uma ação. Depois altere um único número, cor, coordenada ou condição. Antes de recarregar, escreva o efeito esperado. Essa previsão separa uma mudança compreendida de uma tentativa ao acaso.
Diagnóstico guiado
Se a cena sumir, confira a primeira mensagem do Console e o caminho dos arquivos. Em SVG, revise viewBox, atributos e ordem das formas. Em p5.js, confirme a biblioteca local e se setup e draw foram escritos corretamente. Em Canvas ou WebGL, verifique o contexto e os limites numéricos antes de mudar outra coisa.
Critério de avanço
Avance quando conseguir descrever a cena, modificar um parâmetro com previsão e restaurar a referência sem copiar arquivos de uma etapa posterior.
Atividades
- Anti-aliasing é?
- setTimeout 20ms?
- W H do canvas?
Respostas comentadas
Só abra depois de tentar.
Atividade 1. Suavizar bordas com várias amostras.
Atividade 2. Libera a UI antes de renderizar.
Atividade 3. 480×270 neste exemplo.
Exemplo deste capítulo: pacote de exemplos/30-imagem-final/.
O arquivo completo
Referência do exemplo 30-imagem-final, reproduzida aqui para que você possa conferir sem sair da página.
index.html
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Imagem final — Laboratório da Luz</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<a class="skip" href="#conteudo">Ir ao conteúdo</a>
<header>
<p class="tag">Laboratório da Luz · Recife</p>
<h1>Imagem final</h1>
</header>
<main id="conteudo">
<p class="dica">Imagem final</p>
<div class="stage"><canvas id="view" width="480" height="270" aria-label="Imagem renderizada"></canvas></div>
<div class="controles">
<label>Amostras <input id="samples" type="number" min="1" max="16" value="4"></label>
<button type="button" id="run">Renderizar</button>
<span id="status" class="dica"></span>
</div>
</main>
<footer>
<p>Conteúdo fictício para estudo local. Não publique dados reais.</p>
</footer>
<script src="app.js"></script>
</body>
</html>