Skip to content

feat(interaction): implementa mouse picking 3D com raycasting (closes… - #47

Merged
PedroAugusto08 merged 3 commits into
mainfrom
codex/issue-27-raycasting-mouse-picking
Sep 10, 2026
Merged

PedroAugusto08 merged 3 commits into
mainfrom
codex/issue-27-raycasting-mouse-picking

Conversation

@PedroAugusto08

Copy link
Copy Markdown
Collaborator

📌 Descrição das Alterações

Implementa o sistema de Mouse Picking 3D da Issue #27, permitindo converter a posição 2D do cursor em um raio no espaço do mundo e identificar o primeiro voxel atingido no terreno.

O sistema utiliza unprojection com as matrizes reais de Projection, View e transformação do mundo, seguido de travessia voxel com 3D DDA (Amanatides & Woo).

Principais alterações:

  • conversão de coordenadas de tela para NDC;
  • unprojection de pontos near/far para o espaço do mundo;
  • suporte correto à câmera isométrica ortográfica;
  • representação de Ray e RayHit;
  • travessia eficiente de voxels com 3D DDA;
  • suporte a coordenadas negativas;
  • retorno do bloco, ponto de impacto, distância e normal da face atingida;
  • alcance máximo configurável;
  • integração com VoxelGridProvider;
  • hover pulsante no voxel sob o cursor;
  • clique esquerdo retornando informações do bloco selecionado;
  • compatibilidade com pan, zoom, resize e rotação da câmera;
  • suspensão do raycast/hover durante pan para evitar trabalho e feedback visual concorrente.

Também foi corrigido um bug preexistente no pan da câmera: o target era atualizado simultaneamente pelo pan manual e pelo follow automático do token, causando saltos durante o arraste. O pan agora preserva a altura atual do target e o follow é suspenso enquanto o usuário está arrastando a câmera.

Pipeline

Mouse 2D → NDC → Unprojection → Ray → 3D DDA → VoxelGridProvider → RayHit

Validação

  • pytest -v: 399 passed, 3 skipped
  • aplicação validada com python src/main.py --terrain --seed 1
  • hover e clique funcionando corretamente
  • pan validado com Shift + LMB e MMB
  • zoom, resize e rotações Q/E validados
  • git diff --check: sem erros

🔗 Issue Vinculada

Closes #27

Copilot AI and others added 2 commits September 10, 2026 02:11
Co-authored-by: PedroAugusto08 <162599754+PedroAugusto08@users.noreply.github.com>
…-dependency

Declare Pillow in runtime dependencies to unblock pytest collection in CI
@PedroAugusto08
PedroAugusto08 merged commit f4e569a into main Sep 10, 2026
1 check passed
@PedroAugusto08
PedroAugusto08 deleted the codex/issue-27-raycasting-mouse-picking branch September 10, 2026 02:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Equipe B] [Raycasting] Mouse Picking 3D - Conversão de Coordenadas 2D para Raio Vetorial 3D

2 participants