Raytracing in OpenGL über Compute Shader

9

Ich versuche RayTracing in OpenGL über den Compute-Shader zu machen und bin auf ein seltsames Problem gestoßen. Im Moment möchte ich nur eine Kugel ohne jegliche Schattierung anzeigen. Mein Compute Shader startet einen Strahl für jedes Pixel und sieht so aus:

%Vor%

Wenn ich die Anwendung starte, bekomme ich folgendes Bild:

Aber wenn ich denselben Algorithmus auf der CPU laufen lasse, bekomme ich das folgende überzeugendere Bild:

Zuerst dachte ich, ich hätte nicht genug Arbeitsgruppen geschickt, damit nicht jeder Pixel seine eigene Compute-Shader-Invokation bekommt, aber das ist nicht der Fall. Wie Sie im gerenderten GPU-Bild sehen können, gibt es ein rotes Pixel in der Mitte, das durch die letzten Zeilen im Compute-Shader verursacht wird. Dies kann für jedes zweite Pixel reproduziert werden.

Ich verwende im Moment eine Auflösung von 1024x768 und so schalte ich meinen Compute Shader aus:

%Vor%

Wo ist der Fehler? Könnte es ein Problem mit der Genauigkeit der Fließkommaberechnungen geben?

    
Stan 11.03.2013, 16:59
quelle

1 Antwort

3

Der Fehler ist in dieser Zeile:

%Vor%

Da width, height, x und y keine Variablen sind, bekomme ich Probleme, wenn der Ausdruck width / 2-x negativ wird.

Dies löst das Problem:

%Vor%     
Stan 15.03.2013, 10:01
quelle