Seite 1 von 1

[OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 11:51
von joggel
Guten Tag,

ich wollte ein Rauschen wie bei einem Fernseher mittels Shader realisieren.
Dazu habe ich mir eine RauschTextur mittels Gimp generiert.

Ich habe mir das so vorgestellt, dass ich die Texturkoordinaten bei jedem Frame neu übergebe (bei mir sogr zufällig).
Also bei jedem Frame neue Texturkoordinaten für die Rausch-Textur an den Shader übergeben.
Jedoch sehe ich dabei jetzt nur noch eine graue Textur...#

Ich poste mal etwas Code, damit es deutlich wird.

Code: Alles auswählen

	GLint uvNoiseTexTempID = glGetUniformLocation(mShader.mProgramID, "uvNoiseTexTemp");
	float val1 = float(rand() % 100) /100.0f;
	float val2 = float(rand() % 100) / 100.0f;
	glUniform2f(uvNoiseTexTempID,val1, val2 );
Und im VertexShader:

Code: Alles auswählen

#version 330 core
out vec2 uvNoiseTex;
uniform vec2 uvNoiseTexTemp;

void main()
{
  gl_Position.xy = vertexPosition.xy;
  gl_Position.z = 1.0;
  gl_Position.w = 1.0;
  uvNoiseTex = uvNoiseTexTemp;
}
Fragmentshader:

Code: Alles auswählen

in vec2 uvNoiseTex;
uniform sampler2D noiseTextureSampler;
vec4 colNoise;

// Ouput data
out vec4 color;

void main()
{
  colNoise = texture2D( noiseTextureSampler, uvNoiseTex ).rgba;
  color = colNoise;
}
Aber wie gesagt, ich sehe nur eine grau Textur, was mich etwas wundert. Würde ich nix sehen, dann wüsste ich das ich etwas falsch gemacht habe. Aber eine GRAUE Textur?!?!

Weiß jemand etwas?

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 12:03
von xq
Grau klingt nach mipmapping. Sample mal mit texture2Dlod aus der Textur, nimm dafür die 0te mip-ebene.

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 12:06
von joggel
Ebenfalls grau... :-/

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 12:14
von Schrompf
Du benutzt über den kompletten Bildschirm hinweg die selben Texurkoordinaten. Demzufolge samplet der Shader immer von der selben Stelle der Textur, egal wo auf dem Bildschirm er gerade arbeitet. Entweder Du gibst ihm vier Ecken mit jeweils Offset (0,0), (1,0), (0,1), (1,1) als Vertexattribute, oder Du berechnest die aus der VertexID.

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 12:23
von joggel
Ah, okay. Verstehe.
Würde das denn auch funktionieren, wenn ich die 4 Texturkoordinaten an den Vertexsahder übergebe und aus diesen dann im Vertexshader ermittel welchen Wert ich als uv-koordinate an den Fragmentshader übergeben muss?

Bzw:
oder Du berechnest die aus der VertexID.
Und wie geht das?

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 12:43
von Schrompf
https://www.opengl.org/wiki/Built-in_Variable_(GLSL)

In gl_VertexId steht halt der Index des aktuellen Vertex drin. Ohne IndexBuffer beginnt der bei 0 und geht 0, 1, 2 für Dein erstes Dreieck, 3, 4, 5 für Dein zweites Dreieck, usw. Wenn Du einen IndexBuffer benutzt, steht da drin der Index des aktuellen Vertex. Daraus kannst Du dann die Ecke berechnen, wo auf der Textur die aktuelle Bildschirmecke lesen soll.

Wobei ich gerade aus Deinem Shader lese, dass der sehr wohl ein Vertexattribut liest, nur ist das nirgends als Input deklariert. Dass der überhaupt kompiliert, wundert mich gerade. Aber immerhin bedeutet das, dass Du ja schon die Vertexposition da hast. Das muss dann eine vortransformierte Vertexpositionen sein, und die liegen für xy ja im Bereich (-1 ... +1). Also könntest Du auch ganz einfach die benutzen und Dir ein bisschen zurechtskalieren.

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 12:49
von joggel
Doch, sie sind deklariert, ich habe die nur nicht hier gepostet:
layout(location = 0) in vec3 vertexPosition;

Na ich werde es mal probieren...

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 13:03
von joggel
Okay, ich habe jetzt ne lösung gefunden.
Jedoch ist es eine etwas "dreckige" Lösung^^

Ich benutze ganz normal fixe Texturkoordinaten für das Bild. Also (0,0)...(1,1).
Überegebe sie den Vertexshader.
dann generiere ich pro Frame zufällig einen 2d-vektor, übergebe den an den Vertexshader.
Diesen vec2 von der fixen Texturkoordinate abziehen.
Das rauschen funktioniert.

Nachteil ist natürlich, dass ich beim 0. Vertext dann negative TexturKoordinaten erhalte... aber hier geht das eben mal.

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 13:44
von xq
ist eigentlich die schöne lösung. und anstatt abziehen einfach mal addieren und das ergebnis mit lustigen faktoren multiplizieren, dann sollte das ergebnis ein bisschen besser werden

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 13:45
von Krishty
Je nachdem, ob du Shader Model 4 zur Verfügung hast, kannst du das Rauschen auch direkt im Shader erzeugen statt eine Textur zu benutzen. Hat den Vorteil, dass es noch zufälliger ist (keine Wiederholungen) und du keine weitere Ressource pflegen musst:

http://old.zfx.info/DisplayThread.php?TID=24491 (in der Mitte des Threads ist der Code; konvertier von HLSL zu GLSL)

Das verdammte ImageShack hat die Bilder gelöscht; naja, ich habe es hier rechts bei den Sternen eingesetzt:

Bild

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 14:32
von joggel
Ja, sowas habe ich auch irgendwo gelesen, dass man Rauschen auch direkt im Shader erzeugen kann.
Für meinen Zweck reicht das auch, wenn ich das so "billig" mache... wobei das mit der extra Textur dafür schon etwas umständlich ist.

Ich zeige euch mal für was ich das gebraucht habe :P

Will das nur mal schnell aufnehmen und bearbeiten...

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 14:52
von joggel
So, habe es mal aufgenommen.
Man achte bitte nicht auf die Musik, da sie lediglich durch die kräftige Bassline gut dafür geeignet ist um visuell darauf zu reagieren :D
ist nicht jedermanns geschmack, aber für diese zwecke reicht es.

Auch das TV-Gerät sieht irgendwie nicht sooo toll aus, und beißt sich auch irgendwie mit dem Hintergrund...

http://www.vidup.de/v/bbj1a/

Okay, bissl albern... aber egal^^

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 15:02
von Krishty
Sehr schick!

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 15:05
von joggel
Danke :)

Wollte eigentlich noch mehr auf die Audiodaten reagieren.
Vlt. irgendwie im Tak das Bild verzerren oder so... na mal sehen ob ich das noch hinbekomme...

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 15:10
von xq
Cool cool!

Re: [OpenGL] Textur-Rauschen

Verfasst: 30.07.2015, 15:18
von joggel
Ich muss aber sagen, dass das in dem Video noch etwas "schmutziger" wirkt, durch die schlechte Vido- und Audioaufnahmequalität.
Deshalb wirkt das irgendwie etwas runder als hier bei mir in echtzeit.
Vlt kann ich das im programm etwas so anpassen.
Schlechtere Soundqualität und vlt. noch so etwas wie ein shader der das etwas alt und schmutzig wirken lässt....