Im Wesentlichen möchte ich die Notwendigkeit beseitigen, kohärentes Rauschen von der CPU zur GPU zu erzeugen. Von dort aus möchte ich auch das Terrain für eine dreidimensionale Welt erzeugen, indem ich dieses Rauschen als Dichte in Voxelpunkten verwende. Danach möchte ich diese Dichten nehmen und sie polygonisieren (Eckpunkte erzeugen), die das Terrain der Welt darstellen.
Das ist in Ordnung und alles. Ich möchte aber auch die Welt in Echtzeit dynamisch deformieren. Sobald ich an diesem Punkt angelangt bin, habe ich ein Problem damit, die Scheitelpunkte wieder in die CPU zu bringen, um beispielsweise die Kollisionserkennung und alle Spielberechnungen durchzuführen, die ich auf der CPU und nicht auf der GPU ausführen möchte.
Die Frage ist also: Wie kann ich eine Teilmenge der Eckpunkte an die CPU zurückgeben, um unter anderem Kollisionen zu behandeln?
Und noch eine Frage: Gibt es eine einfache Möglichkeit, eine Reihe von Eckpunkten zu nehmen und daraus Indizes auf der GPU zu generieren?
Ich bin verwirrt und weiß nicht, welche Arten von Shadern ich für diese verschiedenen Dinge verwenden soll. Ich höre von Leuten, die einen Pixel-Shader zum Sammeln von Dichten und dann einen Geometrie-Shader zum Behandeln der Geländegenerierung aus den Scheitelpunkten verwenden und dann irgendwie einen Scheitelpunkt-Shader einbauen, um die dynamischen Verformungen durchzuführen.
Ich verwende C # 4.0, .NET 4.0 und XNA Game Studio 4.0.