Bonjour,
Je souhaite créer un shader qui utilise une reflectionMap pour simuler des reflets. En suivant ce très bon tuto, j'arrive à :
- Positionner ma caméra de manière à regarder la scène à refléter
- Ne conserver que la partie qu'il m'intéresse de refléter (dans le tuto en l'occurence, ce qui se situe au-dessus du niveau de l'eau)
- Enregistrer dans un fichier le rendu de la scène
- Afficher enfin ma scène à l'écran
Toutefois, quelle que soit la position "reflétée" de ma caméra, impossible de rendre dans mon fichier la scène reflétée (j'obtiens systématiquement la scène "non reflétée").
Parce qu'une illustration vaut mieux qu'un long discours :
Sur l'illustration 1, c'est ma scène telle qu'elle devrait être affichée, aucun souci mais sur l'illustration 2 ("fichier enregistré"), je devrais avoir quelque chose de ce style (à la couleur de fond près, et sans tenir compte du masquage d'une partie de la scène, je l'ajouterai une fois mon problème actuel réglé) :
Mon code permettant le rendu dans un fichier est le suivant :
Pire encore : si je décide de faire un 3ème CameraManager.ReflectCamera(worldReflectionPlane); (en décommentant le bloc "PLOP" du code ci-dessus), ma scène s'affiche renversée (logique…) mais mon fichier enregistre toujours la même chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 public static void UpdateReflectionMap(GraphicsDevice device) { // First, we reflect the camera to look at the reflected scene Vector4 planeCoeffs = new Vector4(Vector3.UnitY, 5.0f); Plane worldReflectionPlane = new Plane(planeCoeffs); CameraManager.ReflectCamera(worldReflectionPlane); // PLOP // if (debug == true) // CameraManager.ReflectCamera(worldReflectionPlane); // Prepare the graphics device device.SetRenderTarget(0, reflectionRenderTarget); device.Clear(Color.Crimson); DisplayManager.RenderScene(); // Dispose the graphics device device.SetRenderTarget(0, null); reflectionMap = reflectionRenderTarget.GetTexture(); if (SceneManager.HasSceneLoaded() && debug == true) { debug = false; Console.WriteLine("Camera position for saving : " + CameraManager.Position); // ... qui affiche : Camera position for saving : {X:8 Y:-10 Z:12} reflectionMap.Save("reflectionMap.png", ImageFileFormat.Png); Console.WriteLine("Saved. Camera position is now " + CameraManager.Position); // ... qui affiche : Saved. Camera position is now {X:8 Y:-10 Z:12} } CameraManager.ReflectCamera(worldReflectionPlane); DisplayManager.ClearGraphics(); }
Merci d'avance pour votre aide.
Partager