<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.delphigl.com/index.php?action=history&amp;feed=atom&amp;title=shader_Zufallsgenerator</id>
		<title>shader Zufallsgenerator - Versionsgeschichte</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.delphigl.com/index.php?action=history&amp;feed=atom&amp;title=shader_Zufallsgenerator"/>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;action=history"/>
		<updated>2026-06-06T14:26:07Z</updated>
		<subtitle>Versionsgeschichte dieser Seite in DGL Wiki</subtitle>
		<generator>MediaWiki 1.27.4</generator>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24555&amp;oldid=prev</id>
		<title>Coolcat: /* Funktionsweise */</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24555&amp;oldid=prev"/>
				<updated>2010-01-10T13:36:18Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Funktionsweise&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='de'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 10. Januar 2010, 13:36 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l22&quot; &gt;Zeile 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Die Extension [[GL_EXT_gpu_shader4]] macht unter anderem 32bit Integer-Arithmetik im Shader verfügbar. Dies erlaubt es einen [http://en.wikipedia.org/wiki/Linear_congruential_generator lineareren Kongruenzgenerator] zu verwenden um beliebig viele Pseudozufallszahlen direkt im Shader zu erzeugen. Die Pseudozufallszahlen in C/C++/Delphi werden übrigens auf die gleiche Weise erzeugt. Im wesentlichen braucht man nur eine Multiplikation, eine Addition und einmal Modulo um von einer Zufallszahl zur nächsten zu kommen.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Die Extension [[GL_EXT_gpu_shader4]] macht unter anderem 32bit Integer-Arithmetik im Shader verfügbar. Dies erlaubt es einen [http://en.wikipedia.org/wiki/Linear_congruential_generator lineareren Kongruenzgenerator] zu verwenden um beliebig viele Pseudozufallszahlen direkt im Shader zu erzeugen. Die Pseudozufallszahlen in C/C++/Delphi werden übrigens auf die gleiche Weise erzeugt. Im wesentlichen braucht man nur eine Multiplikation, eine Addition und einmal Modulo um von einer Zufallszahl zur nächsten zu kommen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; s := (a * s + c) mod m&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; s := (a * s + c) mod m&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wählt man gute Werte für ''a'', ''c'' und ''m'' erhält man mit diesen Operationen halbwegs gleich verteilte Pseudozufallszahlen. Für ''m'' wählt man häufig einfach 2^32 um den natürlichen Integer-Überlauf auszunutzen. Die so erzeugten Zahlen sind natürlich deterministisch. Verwendet man den gleichen Seed ''s'', erhält man immer die gleiche Zahlenfolge. Man muss also dafür sorgen, dass der Shader für jeden Vertex (bzw. Pixel) unterschiedliche Seeds bekommt. Dafür gibt es verschiedene Lösungen. Beispielsweise lässt sich dies über ein in jedem Frame neu mit Zufallszahlen initialisiertes [[TBO|TextureBufferObject]] (TBO) realisieren. Optional könnte man mittels [[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Shader#Transform-Feedback_.28auch_Stream-Out.29|&lt;/del&gt;Transform-Feedback]] die nach Beendigung des Vertexshaders veränderten Seeds auch wieder zurück in ein TBO schreiben. Dies würde eine Neuinitialisierung durch die CPU ersparen.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wählt man gute Werte für ''a'', ''c'' und ''m'' erhält man mit diesen Operationen halbwegs gleich verteilte Pseudozufallszahlen. Für ''m'' wählt man häufig einfach 2^32 um den natürlichen Integer-Überlauf auszunutzen. Die so erzeugten Zahlen sind natürlich deterministisch. Verwendet man den gleichen Seed ''s'', erhält man immer die gleiche Zahlenfolge. Man muss also dafür sorgen, dass der Shader für jeden Vertex (bzw. Pixel) unterschiedliche Seeds bekommt. Dafür gibt es verschiedene Lösungen. Beispielsweise lässt sich dies über ein in jedem Frame neu mit Zufallszahlen initialisiertes [[TBO|TextureBufferObject]] (TBO) realisieren. Optional könnte man mittels [[Transform-Feedback]] die nach Beendigung des Vertexshaders veränderten Seeds auch wieder zurück in ein TBO schreiben. Dies würde eine Neuinitialisierung durch die CPU ersparen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In vielen Fällen möchte man aber gerade den Determinismus ausnutzen und reproduzierbare Zahlenfolgen erzeugen. Denkbar wäre zum Beispiel eine Kombination der Vertexkoordinaten, etwa:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In vielen Fällen möchte man aber gerade den Determinismus ausnutzen und reproduzierbare Zahlenfolgen erzeugen. Denkbar wäre zum Beispiel eine Kombination der Vertexkoordinaten, etwa:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Coolcat</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24447&amp;oldid=prev</id>
		<title>Coolcat: /* Bilder und Videos */ Youtube-Video</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24447&amp;oldid=prev"/>
				<updated>2010-01-05T13:12:34Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Bilder und Videos: &lt;/span&gt; Youtube-Video&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='de'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 5. Januar 2010, 13:12 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l11&quot; &gt;Zeile 11:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 11:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Bilder==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Bilder &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;und Videos&lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [[Bild:shader_Zufallsgenerator.png|thumb|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;256px&lt;/del&gt;|GPU Partikelsystem mit zufälligem Verwirbelungs-Feld]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [[Bild:shader_Zufallsgenerator.png|thumb|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;320px&lt;/ins&gt;|GPU Partikelsystem mit zufälligem Verwirbelungs-Feld&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&amp;lt;br&amp;gt;[http://www.youtube.com/watch?v=29laKT0LFHc Youtube-Video der gleichen Szene].&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Coolcat</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24446&amp;oldid=prev</id>
		<title>Coolcat: /* Funktionsweise */</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24446&amp;oldid=prev"/>
				<updated>2010-01-05T11:12:39Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Funktionsweise&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='de'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Version vom 5. Januar 2010, 11:12 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l20&quot; &gt;Zeile 20:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 20:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Funktionsweise ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Funktionsweise ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Die Extension [[GL_EXT_gpu_shader4]] macht unter anderem 32bit Integer-Arithmetik im Shader verfügbar. Dies erlaubt es einen [http://en.wikipedia.org/wiki/Linear_congruential_generator lineareren Kongruenzgenerator] zu verwenden &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;und so &lt;/del&gt;beliebig viele Pseudozufallszahlen direkt im Shader zu erzeugen. Die Pseudozufallszahlen in C/C++/Delphi werden übrigens auf die gleiche Weise erzeugt. Im wesentlichen braucht man nur eine Multiplikation, eine Addition und einmal Modulo um von einer Zufallszahl zur nächsten zu kommen.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Die Extension [[GL_EXT_gpu_shader4]] macht unter anderem 32bit Integer-Arithmetik im Shader verfügbar. Dies erlaubt es einen [http://en.wikipedia.org/wiki/Linear_congruential_generator lineareren Kongruenzgenerator] zu verwenden &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;um &lt;/ins&gt;beliebig viele Pseudozufallszahlen direkt im Shader zu erzeugen. Die Pseudozufallszahlen in C/C++/Delphi werden übrigens auf die gleiche Weise erzeugt. Im wesentlichen braucht man nur eine Multiplikation, eine Addition und einmal Modulo um von einer Zufallszahl zur nächsten zu kommen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; s := (a * s + c) mod m&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; s := (a * s + c) mod m&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wählt man gute Werte für ''a'', ''c'' und ''m'' erhält man mit diesen Operationen halbwegs gleich verteilte Pseudozufallszahlen. Für ''m'' wählt man häufig einfach 2^32 um den natürlichen Integer-Überlauf auszunutzen. Die so erzeugten Zahlen natürlich deterministisch. Verwendet man den gleichen Seed ''s'', erhält man immer die gleiche Zahlenfolge. Man muss also dafür sorgen, dass der Shader für jeden Vertex (bzw. Pixel) unterschiedliche Seeds bekommt. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Dies &lt;/del&gt;lässt sich &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;beispielsweise &lt;/del&gt;über ein in jedem Frame neu mit Zufallszahlen initialisiertes [[TBO|TextureBufferObject]] (TBO) realisieren. Optional könnte man &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;dann &lt;/del&gt;mittels [[Shader#Transform-Feedback_.28auch_Stream-Out.29|Transform-Feedback]] die nach Beendigung des Vertexshaders veränderten Seeds wieder zurück in ein TBO schreiben. Dies würde eine Neuinitialisierung durch die CPU ersparen.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Wählt man gute Werte für ''a'', ''c'' und ''m'' erhält man mit diesen Operationen halbwegs gleich verteilte Pseudozufallszahlen. Für ''m'' wählt man häufig einfach 2^32 um den natürlichen Integer-Überlauf auszunutzen. Die so erzeugten Zahlen &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;sind &lt;/ins&gt;natürlich deterministisch. Verwendet man den gleichen Seed ''s'', erhält man immer die gleiche Zahlenfolge. Man muss also dafür sorgen, dass der Shader für jeden Vertex (bzw. Pixel) unterschiedliche Seeds bekommt. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Dafür gibt es verschiedene Lösungen. Beispielsweise &lt;/ins&gt;lässt sich &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;dies &lt;/ins&gt;über ein in jedem Frame neu mit Zufallszahlen initialisiertes [[TBO|TextureBufferObject]] (TBO) realisieren. Optional könnte man mittels [[Shader#Transform-Feedback_.28auch_Stream-Out.29|Transform-Feedback]] die nach Beendigung des Vertexshaders veränderten Seeds &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;auch &lt;/ins&gt;wieder zurück in ein TBO schreiben. Dies würde eine Neuinitialisierung durch die CPU ersparen.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In vielen Fällen möchte man aber gerade den Determinismus ausnutzen und reproduzierbare Zahlenfolgen erzeugen. Denkbar wäre zum Beispiel eine Kombination der Vertexkoordinaten, etwa:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In vielen Fällen möchte man aber gerade den Determinismus ausnutzen und reproduzierbare Zahlenfolgen erzeugen. Denkbar wäre zum Beispiel eine Kombination der Vertexkoordinaten, etwa:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l29&quot; &gt;Zeile 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;seed = unsigned int(position.x * (2 + position.y) * (5 + position.z));&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;seed = unsigned int(position.x * (2 + position.y) * (5 + position.z));&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Genauso könnte der Seed könnte also auch aus einem zufällig gesetztem Uniform kommen oder vielleicht auch &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;eine &lt;/del&gt;Kombination aus &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Vertexkoordinaten &lt;/del&gt;und Uniform. Die Möglichkeiten sind unbegrenzt.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Genauso könnte der Seed könnte also auch aus einem zufällig gesetztem Uniform kommen oder vielleicht auch &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;einer &lt;/ins&gt;Kombination aus &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;tt&amp;gt;gl_VertexID&amp;lt;/tt&amp;gt; &lt;/ins&gt;und &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;einem &lt;/ins&gt;Uniform. Die Möglichkeiten sind unbegrenzt.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Bemerkungen ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Bemerkungen ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Coolcat</name></author>	</entry>

	<entry>
		<id>https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24443&amp;oldid=prev</id>
		<title>Coolcat: Die Seite wurde neu angelegt: „=Shadername= Zurück zur Shadersammlung {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Version |- |Pseudozufallszahlen im…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.delphigl.com/index.php?title=shader_Zufallsgenerator&amp;diff=24443&amp;oldid=prev"/>
				<updated>2010-01-04T23:03:38Z</updated>
		
		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „=Shadername= Zurück zur &lt;a href=&quot;/index.php/Shadersammlung&quot; title=&quot;Shadersammlung&quot;&gt;Shadersammlung&lt;/a&gt; {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Version |- |Pseudozufallszahlen im…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Shadername=&lt;br /&gt;
Zurück zur [[Shadersammlung]]&lt;br /&gt;
{|{{Prettytable_B1}} width=100%&lt;br /&gt;
!width=60%|Beschreibung&lt;br /&gt;
!width=20%|Autor&lt;br /&gt;
!width=20%|Version&lt;br /&gt;
|-&lt;br /&gt;
|Pseudozufallszahlen im Shader mit [[GL_EXT_gpu_shader4]]&lt;br /&gt;
|Coolcat&lt;br /&gt;
|1.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Bilder==&lt;br /&gt;
{|&lt;br /&gt;
| [[Bild:shader_Zufallsgenerator.png|thumb|256px|GPU Partikelsystem mit zufälligem Verwirbelungs-Feld]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
Die Extension [[GL_EXT_gpu_shader4]] wird zwingend benötigt, ohne volle 32bit Integer-Arithmetik lassen sich keine sinnvollen Pseudozufallszahlen erzeugen.&lt;br /&gt;
&lt;br /&gt;
== Funktionsweise ==&lt;br /&gt;
Die Extension [[GL_EXT_gpu_shader4]] macht unter anderem 32bit Integer-Arithmetik im Shader verfügbar. Dies erlaubt es einen [http://en.wikipedia.org/wiki/Linear_congruential_generator lineareren Kongruenzgenerator] zu verwenden und so beliebig viele Pseudozufallszahlen direkt im Shader zu erzeugen. Die Pseudozufallszahlen in C/C++/Delphi werden übrigens auf die gleiche Weise erzeugt. Im wesentlichen braucht man nur eine Multiplikation, eine Addition und einmal Modulo um von einer Zufallszahl zur nächsten zu kommen.&lt;br /&gt;
 s := (a * s + c) mod m&lt;br /&gt;
Wählt man gute Werte für ''a'', ''c'' und ''m'' erhält man mit diesen Operationen halbwegs gleich verteilte Pseudozufallszahlen. Für ''m'' wählt man häufig einfach 2^32 um den natürlichen Integer-Überlauf auszunutzen. Die so erzeugten Zahlen natürlich deterministisch. Verwendet man den gleichen Seed ''s'', erhält man immer die gleiche Zahlenfolge. Man muss also dafür sorgen, dass der Shader für jeden Vertex (bzw. Pixel) unterschiedliche Seeds bekommt. Dies lässt sich beispielsweise über ein in jedem Frame neu mit Zufallszahlen initialisiertes [[TBO|TextureBufferObject]] (TBO) realisieren. Optional könnte man dann mittels [[Shader#Transform-Feedback_.28auch_Stream-Out.29|Transform-Feedback]] die nach Beendigung des Vertexshaders veränderten Seeds wieder zurück in ein TBO schreiben. Dies würde eine Neuinitialisierung durch die CPU ersparen.&lt;br /&gt;
&lt;br /&gt;
In vielen Fällen möchte man aber gerade den Determinismus ausnutzen und reproduzierbare Zahlenfolgen erzeugen. Denkbar wäre zum Beispiel eine Kombination der Vertexkoordinaten, etwa:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;glsl&amp;quot;&amp;gt;&lt;br /&gt;
ivec3 position = ivec3(gl_Vertex);&lt;br /&gt;
seed = unsigned int(position.x * (2 + position.y) * (5 + position.z));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Genauso könnte der Seed könnte also auch aus einem zufällig gesetztem Uniform kommen oder vielleicht auch eine Kombination aus Vertexkoordinaten und Uniform. Die Möglichkeiten sind unbegrenzt.&lt;br /&gt;
&lt;br /&gt;
== Bemerkungen ==&lt;br /&gt;
Man sollte nicht auf die Idee kommen die Seedwerte als ''float'' zwischen zu speichern. Die Konvertierung in ''float'' sorgt dafür das die erzeugten Zufallszahlen sehr schnell degenerieren und nicht mehr gleich verteilt sind.&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Linear_congruential_generator#LCGs_in_common_use Gute Werte für ''a'', ''c'' und ''m''] findet man z.B. bei Wikipedia. Man sollte darauf achten, dass der Zufallsgenerator, der die Textur für die Ausgangswerte initialisiert nicht den gleichen lineareren Kongruenzgenerator verwendet. Da die erzeugten Zahlen deterministisch sind, würde man sonst für alle Vertices/Pixel die gleichen, jeweils nur um eine Generation verschobenen, Zahlen erhalten.&lt;br /&gt;
&lt;br /&gt;
==Code==&lt;br /&gt;
====Basis-Shader====&lt;br /&gt;
Dies ist der Basis-Shader mit zwei einfachen Hilfsfunktionen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;glsl&amp;quot;&amp;gt;#extension GL_EXT_gpu_shader4 : require&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
uniform usamplerBuffer tboRandomSeed;&lt;br /&gt;
unsigned int seed;&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
/* return pseudorandom float with values between 0 and 1. */&lt;br /&gt;
float random() {&lt;br /&gt;
	seed = (seed * 1103515245u + 12345u);&lt;br /&gt;
	return float(seed) / 4294967296.0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* return pseudorandom vec3 with values between -1 and 1. */&lt;br /&gt;
vec3 random3() {&lt;br /&gt;
	vec3 result;&lt;br /&gt;
	seed = (seed * 1103515245u + 12345u); result.x = float(seed);&lt;br /&gt;
	seed = (seed * 1103515245u + 12345u); result.y = float(seed);&lt;br /&gt;
	seed = (seed * 1103515245u + 12345u); result.z = float(seed);&lt;br /&gt;
	return (result / 2147483648.0) - vec3(1,1,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	// seed source is a TextureBufferObject&lt;br /&gt;
	seed = texelFetchBuffer(tboRandomSeed, gl_VertexID).x;&lt;br /&gt;
&lt;br /&gt;
	float rnd = random();&lt;br /&gt;
	vec3 rnd3 = random3();&lt;br /&gt;
&lt;br /&gt;
	// ...&lt;br /&gt;
&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Reproduzierbares Zufallswirbel-Feld====&lt;br /&gt;
Ein reproduzierbares Zufallswirbel-Feld für ein [[GLSL_Partikel_2|GPU-Partikelsystem]]. Für jede ganzzahlige Position wird ein reproduzierbarer Pseudozufallsvektor erzeugt. Für jeden Partikel wird berechnete Vektor der umliegenden 8 Ganzzahl-Positionen interpoliert. Da das Feld in jedem Frame identisch ist ergibt sich eine stetige Verwirbelung. Man könnte die gesamte Berechnung auch für mehrere Initialseeds (via Uniform) durchführen und zwischen diesen interpolieren. Dies würde es erlauben, dass sich das Wirbel-Feld laufend langsam ändert.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;glsl&amp;quot;&amp;gt;#extension GL_EXT_gpu_shader4 : require&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
&lt;br /&gt;
vec3 randomVec(unsigned int seed, ivec3 pos) {	&lt;br /&gt;
	seed *= unsigned int(pos.x * (2 + pos.y) * (5 + pos.z));&lt;br /&gt;
	vec3 result;&lt;br /&gt;
	seed = (seed * 1103515245u + 12345u); result.x = float(seed);&lt;br /&gt;
	seed = (seed * 1103515245u + 12345u); result.y = float(seed);&lt;br /&gt;
	seed = (seed * 1103515245u + 12345u); result.z = float(seed);&lt;br /&gt;
	return (result / 2147483648.0) - vec3(1,1,1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
vec3 noiseField(unsigned int seed, vec3 position) {&lt;br /&gt;
	vec3 f = floor(position);&lt;br /&gt;
	ivec3 min = ivec3(f);&lt;br /&gt;
	ivec3 max = min + 1;&lt;br /&gt;
	f = position - f;&lt;br /&gt;
	vec3 g = 1.0 - f;&lt;br /&gt;
	vec3 result = vec3(0,0,0);&lt;br /&gt;
	result += randomVec(seed, ivec3(min.x, min.y, min.z)) * g.x * g.y * g.z;&lt;br /&gt;
	result += randomVec(seed, ivec3(min.x, min.y, max.z)) * g.x * g.y * f.z;&lt;br /&gt;
	result += randomVec(seed, ivec3(min.x, max.y, min.z)) * g.x * f.y * g.z;&lt;br /&gt;
	result += randomVec(seed, ivec3(min.x, max.y, max.z)) * g.x * f.y * f.z;&lt;br /&gt;
	result += randomVec(seed, ivec3(max.x, min.y, min.z)) * f.x * g.y * g.z;&lt;br /&gt;
	result += randomVec(seed, ivec3(max.x, min.y, max.z)) * f.x * g.y * f.z;&lt;br /&gt;
	result += randomVec(seed, ivec3(max.x, max.y, min.z)) * f.x * f.y * g.z;&lt;br /&gt;
	result += randomVec(seed, ivec3(max.x, max.y, max.z)) * f.x * f.y * f.z;&lt;br /&gt;
	return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
	// ...&lt;br /&gt;
&lt;br /&gt;
	unsigned int seed = 12345u;&lt;br /&gt;
	velocity += timeElapsed * noiseField(seed, position*0.2);&lt;br /&gt;
&lt;br /&gt;
	// ...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Coolcat</name></author>	</entry>

	</feed>