prev up next


Aufgabe 10.1 (40 Punkte)

Implementieren Sie das Asteroiden-Partikelsystem aus der Vorlesung unter Verwendung von lokalem Speicher. Laden Sie sich hierzu folgendes Basisprogramm auf Ihren Rechner und installieren Sie es in einer Entwicklungsumgebung. Alle notwendigen Kommandos die der Client ausführt sind in der Klasse Asteroids gekapselt. Die Klasse SolSystem hält bereits eine Instanz dieser Klasse und ruft bereits alle notwendigen Methoden auf um etwas auf dem Bildschirm zu sehen. Wenn Sie das Programm starten, sehen Sie das bekannte Sonnensystem und dazu einen Asteroidengürtel um die Erde verteilt. Schauen Sie sich die Klasse Asteroids einmal grob durch um den logischen Ablauf zu verstehen. Ihre Aufgabe besteht nun darin den vorgegebenen OpenCL Kernel asteroid_sim sowie die Hilfsmethode collide mit Inhalt zu füllen. Die Datei enthält bereits den leeren OpenCL Kernel.

__kernel void asteroid_sim(

__global float4* old_points,

__global float4* new_points,

__global float4* old_velos,

__global float4* new_velos,

uint count, float dt);

Entsprechend die collide Methode.

float4 collide(

float4 n, //otherPos - myPos

float4 vi, float4 vj, float distance);

Orientieren Sie sich bei der Implementierung genauestens an den Vorlesungsaufzeichnungen. Beachten Sie, dass der Radius jedes Asteroiden in der w-Komponente von old bzw new_points gespeichert wird. Der Radius sollte von keinen Berechnungen verändert werden. Außerdem ist es sinnvoll die Kollisionsberechnung erst dann durchzuführen, wenn die zwei zu vergleichenden Partikel auch wirklich miteinander kollidieren. Testen Sie also vorher ob dies der Fall ist, bevor Sie die Methode collide aufrufen. Laden Sie auch nur dann die Velocity aus dem globalen Speicher wenn dies notwendig ist. Für die Orbitalkorrektur können Sie folgende Formel verwenden:

float4 orbitCorrection(float4 myPos, float4 myVelo)

{

float4 r = normalize(-myPos);

return myVelo - GRAVITY * r * dot(r, myVelo);

}

Hinweis: Stellen Sie sich darauf ein den Algorithmus und vor allem die Verwendung des lokalen Speichers in Ihrem Testat zu erklären.


Musterlösung (ab 04.07.2012-16:00)


prev up next