Definitivamente, você pode criar tipos semelhantes de interfaces no WPF, mas integrá-las a um jogo Direct3D é problemático. Você pode hospedar conteúdo do Direct3D no WPF (via D3DImage
), mas o conteúdo 3D seria composto no aplicativo WPF, para que a renderização se torne dependente do WPF. Conseqüentemente, você pode ter um desempenho relativamente ruim, pois está limitado pela taxa de quadros do WPF. Além disso, como U62 observou em seu comentário, o WPF pode hospedar apenas o conteúdo do Direct3D 9 (em oposição ao Direct3D 10/11). No entanto, você pode contornar isso, pois IDirect3DDevice9Ex
é capaz de compartilhar recursos entre dispositivos. Portanto, você pode criar um destino de renderização compartilhado no Direct3D 10 ou 11 e trazê-lo para o WPF por meio de um IDirect3DDevice9Ex
dispositivo intermediário . Jeremiah Morrill discute essa técnica aqui .
Uma alternativa, embora longe de ser elegante, seria renderizar a interface do usuário do WPF em uma janela em camadas separada acima do conteúdo do Direct3D, conforme descrito aqui .
Também existem maneiras de acessar a superfície interna do Direct3D do WPF , o que permitiria hospedar o conteúdo do WPF em uma cena externa do Direct3D (em vez do contrário). No entanto, esse é um truque bastante desagradável e pode ser facilmente quebrado por versões futuras do WPF.
Obviamente, nada disso é relevante se você realmente não precisar interoperar com o Direct3D. Jogos que não exigem gráficos 3D complexos certamente podem ser desenvolvidos completamente no WPF . O WPF possui algumas instalações 3D simples à sua disposição, embora geralmente sejam insuficientes para qualquer coisa além de formas primitivas com texturas simples. Ele também suporta sombreadores de pixel personalizados, embora existam muitas restrições (por exemplo, devem ser efeitos de passagem única).