Alternativ können Sie eine Würfelkarte mit einer Himmelstextur anstelle von Perlin-Rauschen verwenden. Und ich denke auch, dass Ihre Szene dadurch besser aussieht, da die Umgebungszuordnung detaillierter und abwechslungsreicher ist. Genau das habe ich getan, als ich meinen Raytracer implementiert habe.
Ein weiterer Grund, warum ich dies empfehle, ist, dass die Umgebung nicht nur aus Wolken bestehen muss. Es kann Berge haben, es kann eine Innenszene sein, es kann eine Szene vom Mars sein. Mit einer Würfelkarte müssen Sie nur die Textur austauschen und fertig.
Der erste Schritt besteht also darin, eine Würfelkarte zu finden, die Ihren Anforderungen entspricht. Es kann als sechs separate Texturen oder als einzelne Textur wie die folgende gespeichert werden. Auch überprüfen Sie diesen Link für weitere Informationen, wie Sie Ihre eigenen erstellen:
Dann würde ich empfehlen, für Ihren Code eine CubeMap
Klasse zu erstellen , um die Stichprobenberechnungen zu kapseln. Diese Klasse sollte wissen, wie die Würfelkartentextur geladen wird, und mit einem Strahl sollte sie wissen können, in welchem Gesicht und an welcher Position sie abtasten soll. In meiner Implementierung fand ich es einfacher, jede der sechs Flächen in separaten Texturobjekten zu speichern und basierend auf der Richtung des Strahls zu verzweigen:
class CubeMap
{
public void Load(string path);
public Color GetSample(Ray ray);
private Texture[6] faces;
}
Falls Sie noch keine Texture
Klasse haben, erstellen Sie einfach Ihre eigene. Es kann so einfach sein wie eine zweidimensionale Anordnung von Farben. Nur als Referenz und ohne Garantie für die Effizienz oder Solidität dieser Implementierung, hier ist der Code, den ich für mein Projekt verwendet habe - CubeMap und CubeFace .