WPF, XAML e Renderização em Tempo Real (60+ FPS)
O Windows Presentation Foundation (WPF) é o subsistema gráfico do Windows que gerencia a interface do usuário do CGPDI.StudyLab.
1. O que é XAML e Como Ele Funciona?
A Analogia da Planta Baixa da Casa:
Pense no XAML (Extensible Application Markup Language) como a planta baixa desenhada por um arquiteto: ela diz onde fica cada porta, janela e interruptor de forma limpa e organizada.
Em vez de escrever dezenas de linhas manuais para instanciar controles:
Button btn = new Button();btn.Content = "Aplicar Filtro";btn.Width = 150;painel.Children.Add(btn);No XAML, declaramos a estrutura de forma visual:
<Button Content="Aplicar Filtro Gaussiano" Width="180" Height="36" Background="#1e293b" Foreground="#38bdf8" Click="BtnApplyGaussian_Click" />No MainWindow.xaml, a janela principal é dividida em:
- Cabeçalho: Logotipo, título do laboratório e seletores gerais.
- Abas Principais (
TabControl):- Processamento Digital de Imagens (PDI)
- Computação Gráfica 2D (Rasterização)
- Computação Gráfica 3D (Hardware DirectX)
- Software 3D & Ray Tracing (CPU)
- Central de Estudos e Guia Teórico
- Painéis Laterais de Controle (
StackPaneleScrollViewer): Contêm os sliders de parâmetros, botões de ação e caixas de seleção. - Visor Central (
ImageeViewport3D): Onde o resultado dos pixels processados e os objetos 3D são exibidos.
2. Como o WPF se Conecta com o DirectX?
Aplicações clássicas do Windows (como o Windows Forms antigo) utilizavam o GDI+, que desenhava tudo na CPU pixel a pixel.
O WPF utiliza internamente o DirectX:
- Cada controle visual, botão e imagem na tela é convertido internamente em uma textura ou triângulo 3D gerenciado pela GPU.
- A composição final da janela é executada pela placa de vídeo em sincronia com a taxa de atualização do monitor.
3. O Papel do WriteableBitmap
Para exibir uma imagem calculada pelo nosso algoritmo C# (como um filtro de Canny ou uma cena de Ray Tracing), usamos o controle WriteableBitmap:
// Cria uma imagem vazia na memoria com formato Bgra32:WriteableBitmap wbmp = new WriteableBitmap(512, 512, 96, 96, PixelFormats.Bgra32, null);
// Vincula o Bitmap ao controle de Imagem na tela XAML:MyImageControl.Source = wbmp;O Ciclo de Bloqueio e Liberação (Lock / Unlock):
sequenceDiagram participant Algoritmo as Algoritmo C# participant DirectBitmap as DirectBitmap participant WPF as Subsistema WPF e DirectX
Algoritmo->>DirectBitmap: bmp.Lock() DirectBitmap->>WPF: Bloqueia BackBuffer na RAM Note over Algoritmo,DirectBitmap: Escreve pixels em paralelo (Parallel.For) Algoritmo->>DirectBitmap: bmp.Unlock(markDirty: true) DirectBitmap->>WPF: AddDirtyRect(0, 0, Width, Height) WPF->>DirectX: Envia nova textura para a GPU DirectX-->>WPF: Pixel atualizado na tela4. O Viewport3D do WPF
Para a exibição 3D acelerada por hardware, o WPF fornece o elemento <Viewport3D>:
- Câmera:
<PerspectiveCamera>que define a posição do observador , o vetor de direção do olhar e o campo de visão (Field of View - FOV). - Luzes:
<DirectionalLight>,<PointLight>e<AmbientLight>que iluminam os modelos poligonais. - Modelos:
<GeometryModel3D>contendo a malha de triângulos (MeshGeometry3D) e os materiais de superfície (DiffuseMaterialeSpecularMaterial).
📚 Referências Oficiais Microsoft Learn
Recursos fundamentais para desenvolvimento com WPF e XAML no .NET:
- Visão Geral da Linguagem XAML no WPF — Sintaxe declarativa, propriedades de dependência e ciclo de vida de elementos visuais.
- Visão Geral de Gráficos 3D no WPF — Criação de malhas
MeshGeometry3D, iluminação e gerenciamento de câmeras. - Modelo de Threading do WPF (Dispatcher) — Entenda o Dispatcher e como atualizar elementos de interface a partir de threads secundárias.
👉 Próximo Passo: Entre no Módulo de Núcleo de Memória & Ponteiros.