Se você estiver usando o OpenGL, a seção FAQ do OpenGL 9: Transformações aborda exatamente como fazer isso. E não, não envolve raytracing, pois é compreensivelmente uma maneira muito ineficiente (mas de alta qualidade) de fazer isso.
9.170 Como renderizo um espelho?
Aqui está essencialmente o que a entrada da FAQ diz e o código de exemplo demonstra:
- Configure uma matriz de vista refletida. Fazer isso para espelhos alinhados a eixos é explicado no segundo parágrafo.
- Desenhe a cena
- Restaure a matriz da vista e limpe o buffer de profundidade
- Renderize a cena novamente; a geometria do espelho real nesta cena deve ser translúcida ou totalmente transparente, para mostrar a cena espelhada renderizada anteriormente.
Obviamente, há muito espaço para otimização. Ao renderizar a cena refletida, você provavelmente deve selecionar o máximo possível, pois os espelhos são pequenos e a seleção padrão fora da tela não entra na geometria que está na tela, mas não é vista através do espelho. Você também pode renderizar apenas uma versão simplificada da cena através do espelho. Para efeitos e para obscurecer o usuário de perceber a qualidade reduzida, você pode aplicar um sombreador (por exemplo, desfoque, ou talvez brilhante / desbotado) ao fazer sua renderização espelhada.
Imagino que, se você estiver usando o DirectX, o procedimento seria o mesmo.