LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?)

Times

Bekanntes Mitglied
Hallo - ich bins schonwieder (nicht der schonwieder :D)

in meinem letzten Thread ging es darum wie ich am besten viele verschiedene TerrainTexturen in einer zufällig generierten Welt darstelle und das funktioniert auch alles soweit.
Ich habe das ganze bereits mit mehreren Texturen und Transparenzwerten getestet und es funktioiniert soweit, zur Veranschaulichung in diesem Thread aber entfernt.
Ich verwende also zurzeit nur 7 verschiedene Grundtexturen welche verschiedene Ariale der Welt ausmachen (OCEAN, SEA, COAST, PLATEU, HILL, MOUNTAIN).

Die Texturdatei sieht in diesem Beispiel also aus (Lila Hintergrund zur Erkennung ob Fehler bei der Zuweisung auftreten!)
fE9TQIq.png

(Habe das Bild zur Veranschaulichung verkleinert!)

Die TexturIndex'e werden durch einen Höhenbereich ermittelt. So liegt das Plateu zwischen -0.2f und 0.5f wenn man die Höhe auf einen Bereich von -1 bis +1 umrechnet.

Zur Zeit ist jedes Arial durch eine gerade Trennung vom anderen Arial abgetrennt. Würde das folgende Problem gerne erst beheben bevor ich die Höhenwerte der Trennung noch ein wenig hin und herschiebe sodass es ein bisschen kurvig aussieht.

Wenn ich das ganze nun starte, mich auf einen Berg stelle und nach unten sehe, sieht das wie folgt aus:
sZLQRTZ.png


Die roten "Blitz-Pfeile" (Mein tolles Bildbearbeitungsprogramm kann keine Pfeile!) zeigen auch schon den Effekt.
Nun anfangs kann man meinen ich hätte an den Rändern falsche TexturKoordinaten verwendet, da diese so lila mäßig aussehen, der Shader also auf die falsche Koordinate in der Textur zurückgreift, aber das ist es nicht.
Habe die Ränder zunächst einmal herausgefiltert und mir die Index'e ausgeben lassen und die stehen richtig.

Das ganze tritt allerdings nur auf wenn ich mich weit entferne. Wenn ich näher herangehe sieht alles so aus wie es soll.
ABER: Wie bereits oben erwähnt habe ich der Textur extra einen lila Hintergrund gegeben.. zu Anfang war ich noch so naiv zu denken das dies nur zufällig so aussieht, aber Pustekuchen.. habe die Farbe auf pink, dann schwarz geändert und die Ränder nehmen genau diese Farbe an, was mich immer mehr verwirrt.

Im nächsten Schritt habe ich meinen TerrainFragmentShader kopiert und auf 1 Zeile dezimiert (Alle Licht, Schatten, Zeit Änderungen an der Farbe entfernt) und bis auf das alles etwas grell aussieht ist das Problem geblieben.

outColor = texture(terrainTexture, pass_textureCoords);

outColor = Ausgabewert der Farbe: vec4
terrainTexture = TexturDatei: sampler2D
pass_textureCoords = TexturKoordinaten (x und y jeweils zwischen 0 und 1): vec2 -> Werden vom TerrainVertexShader übergeben, aber dieser macht nichts mit den Koordinaten, also verändert diese nicht. Sie werden einfach nur weitergereicht.

Nun weit umher geredet.. ich würde behaupten liegt an der ViewMatrix im TerrainVertexShader.
Wie komme ich darauf: Je nachdem wie ich die Kamera drehe tritt das Problem auf und dann auch mal wieder nicht.
Regeln dafür wann die Probleme auftreten:
- Je weiter die Kamera entfernt ist, desto stärker tritt der Effekt auf
- Je weiter Pitch-Rotation gen "Boden" geht, desto stärker tritt der Effekt auf. Wenn ich von oben schaue sieht alles okay aus, egal wie weit die Kamera entfernt ist.
- Über Änderung der Yaw-Rotation kann ich keine genaue Aussage machen, da zum einen die Pitch-Rotation nicht zu weit oben sein darf (2. Punkt) und sich deswegen beim ändern der Yaw-Rotation der Abstand zum "Boden" auch immer ändert und der Effekt mal auftritt und mal nicht (1. Punkt).

In dieser Welt:
Pitch: Rotation um die X-Achse
Yaw: Rotation um die Y-Achse
Erklärungen hierfür sind im Internet nicht immer gleich, habe auch mehrere Definitionen gesehen in der bei Pitch von der Z-Achse ausgegangen - also nicht wundern wenn ihr es etwas anders kennt!

ViewMatrix Erstellung:
Code:
Matrix4f matrix = new Matrix4f();
        matrix.setIdentity();
        Matrix4f.rotate((float)Math.toRadians(camera.getPitch()), new Vector3f(1, 0, 0), matrix, matrix);
        Matrix4f.rotate((float)Math.toRadians(camera.getYaw()), new Vector3f(0, 1, 0), matrix, matrix);
        Vector3f cameraPos = camera.getPosition();
        Vector3f cameraPosNeg = new Vector3f(-cameraPos.x, -cameraPos.y, -cameraPos.z);
        Matrix4f.translate(cameraPosNeg, matrix, matrix);

Den TerrainVertexShader habe ich auch so weit wie möglich dezimiert um die Fehlerquelle schneller ausfindig zu machen.

Code:
vec4 worldPosition = transformationMatrix * vec4(position, 1.0);
    vec4 relPosCam = viewMatrix * worldPosition;
    gl_Position = projectionMatrix * relPosCam;

    pass_textureCoords = textureCoords;

transformationMatrix wird von Java übergeben: Matrix4f
position wird von Java übergeben: Vec3f
viewMatrix wird von Java übergeben: Matrix4f
pass_textureCoords: Output an den TerrainFragmentShader!


Von nun an weiss ich nicht weiter wie ich es testen soll, da ich diese Zeilen nicht noch weiter dezimieren kann!

Ich hoffe so sehr das es ein simpler einfacher Fehler ist dem schonmal jemand passiert ist :D

Falls jemand noch mehr Code braucht oder weitere Informationen möchte, einfach Bescheid geben bitte.

Grüße
Times
 

Baldur

Aktives Mitglied
Wenn ich das jetzt richtig verstanden habe, dann sind bei dir alle Terrains in einer einzelnen Textur zusammengefasst?
Es gibt verschiedene Varianten, wie die GPU die Farbe berechnet, die dir für eine bestimmte Texturkoordinate zurückgegeben werden. Einstellen kann man das bei OpenGL mittels
glTexParameteri(GL_TEXTURE_MIN_FILTER, x) bzw. glTexParameteri(GL_TEXTURE_MAX_FILTER, x)
Je nachdem, was du für x übergibst, wird eine andere Art Berechnung durchgeführt. Wenn du den Parameter auf GL_NEAREST stellst, wird vermutlich das passieren, was du erwartest und du bekommst direkt die Farbe an der entsprechenden Stelle. Der Nachteil daran ist, daß bei GL_NEAREST die Textur schnell pixelig aussehen kann, wenn man nahe heran geht.
Stellst du die Filteroption auf GL_LINEAR (was bei dir der Fall sein dürfte), dann nimmt sich die GPU jeweils die vier nächsten Pixel und vermischt deren Farben. Dadurch werden die Übergänge etwas weicher, aber es kann z.B. auch passieren, daß dir, wenn du auf eine Texturkoordinate nahe an dem rosa Teil zugreifst, dir auch diese Farbei mit rein gemischt wird und du so diese Kanten bekommst.

Am besten wäre es natürlich, wenn du statt einer Textur mit verschiedenen Terrains für jedes Terrain jeweils eine eigene Textur nimmst, bzw. ggf ein Textur-Array. Falls du später mal "richtige" Texturen für dein Terrain haben willst, also z.B. mit einer Struktur für den Sand, etc., dann willst du die Texturen vermutlich auch kacheln, was mit richtigen Texturen, die von Rand zu Rand durchgängig sind auch einfacher ist.
 

Times

Bekanntes Mitglied
Hey :)

Danke für die Antwort. Ich werde danach schauen wenn ich wieder zuhause bin (Kann noch etwas dauern), aber melde mich dann aufjedenfall nochmal =)

Liebe Grüße
Times
 

Times

Bekanntes Mitglied
Guten Morgen (Mittag)..

wie versprochen wollte ich mich nochmal melden. Es hat soweit alles funktioniert und ich bin glücklich :)
Vielen Dank Baldur!

Grüße
Times
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
coolian lwjgl glfw window zeigt nur grau an Spiele- und Multimedia-Programmierung 0
coolian slick lwjgl text darstellen mit UnicodeFont funktoniert nicht? Spiele- und Multimedia-Programmierung 11
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
V LWJGL GUI Spiele- und Multimedia-Programmierung 1
V GUI in LWJGL 2 erstellen Spiele- und Multimedia-Programmierung 6
C GLSL Shaderprogrammierung in LWJGL 3 Spiele- und Multimedia-Programmierung 12
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
G LWJGL .obj .mtl loader Spiele- und Multimedia-Programmierung 3
G 2D animationen LWJGL Spiele- und Multimedia-Programmierung 0
pcfreak9000 "Allgemeine" Performance verbessern (LWJGL 2) Spiele- und Multimedia-Programmierung 2
G LWJGL Rendert nicht Spiele- und Multimedia-Programmierung 3
G lwjgl verwendung Spiele- und Multimedia-Programmierung 6
R [LWJGL] Skeletal Animation Spiele- und Multimedia-Programmierung 5
E LWJGL glGenVertexArrays() erzeugt doppelte IDs Spiele- und Multimedia-Programmierung 3
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
K No Lwjgl Spiele- und Multimedia-Programmierung 2
T LWJGL: Terrain-Texturen / 2D-Array in Shader? Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
T [LWJGL] Textur / File wieder freigeben Spiele- und Multimedia-Programmierung 4
F [LWJGL] Skeletal Animation 3D Spiele- und Multimedia-Programmierung 1
C Generelle Hilfe zur lwjgl Spiele- und Multimedia-Programmierung 0
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
RalleYTN LWJGL Vignette Spiele- und Multimedia-Programmierung 2
E LWJGL Switchen zwischen gluOrtho und gluPerspective Spiele- und Multimedia-Programmierung 0
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
C LWJGL Color Picking Textures deaktivieren Spiele- und Multimedia-Programmierung 0
K FBO Framebuffer object [LWJGL] 2D tutorial gesucht Spiele- und Multimedia-Programmierung 2
K [LWJGL] 2D Tunneler Hintergrund Spiele- und Multimedia-Programmierung 7
S LWJGL 3d-spieleentwicklung Spiele- und Multimedia-Programmierung 3
H LWJGL-Renderfail Spiele- und Multimedia-Programmierung 1
Seikuassi LWJGL - Texturen flackern Spiele- und Multimedia-Programmierung 2
Androbin LWJGL - Kollisions-Bug (Fallen) Spiele- und Multimedia-Programmierung 14
K Schiessen in 2D (LWJGL) Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
U Kann nur ein Objekt mit LWJGL rendern Spiele- und Multimedia-Programmierung 2
X LWJGL | Parent.isDisplayable() must be true | wie kann man das zu true machen? Spiele- und Multimedia-Programmierung 0
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
X LWJGL - Anklick baren Button erstellen aber wie? Spiele- und Multimedia-Programmierung 6
U Quadrate anklicken LWJGL Spiele- und Multimedia-Programmierung 3
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
B LWJGL Manche Seiten werden transparent angezeigt Spiele- und Multimedia-Programmierung 2
T LWJGL VBO's funktionieren nicht, geben aber auch keinen Fehler Spiele- und Multimedia-Programmierung 0
U Komische fragmente bei LWJGL Spiele- und Multimedia-Programmierung 6
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
S [LWJGL] Zweimal selbe Textur trotz unterschiedlicher IDs Spiele- und Multimedia-Programmierung 3
O LWJGL AWTGLCanvas Tiefe auf 1 beschränkt Spiele- und Multimedia-Programmierung 5
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
S [LWJGL] schwarzer Bildschrim beim rendern von .obj Model Spiele- und Multimedia-Programmierung 2
S [lwjgl] Renderbug bei mehreren Objekten Spiele- und Multimedia-Programmierung 2
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Koordinaten invertiert. Spiele- und Multimedia-Programmierung 2
M LWJGL Text rendern Spiele- und Multimedia-Programmierung 3
B LWJGL Mauskoordinaten Spiele- und Multimedia-Programmierung 1
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
B LWJGL Display.update() ist langsam Spiele- und Multimedia-Programmierung 5
R LWJGL: Performance glBegin, drawList, ... Spiele- und Multimedia-Programmierung 16
R LWJGL: Object Loader -> .obj, .c4d, ... laden Spiele- und Multimedia-Programmierung 3
R LWJGL: Textur -> unsichtbare Stellen, wie erzeugen? Spiele- und Multimedia-Programmierung 4
A LwJGL - Animation Stockt Spiele- und Multimedia-Programmierung 5
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
R LWJGL: 3D Picking Spiele- und Multimedia-Programmierung 4
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
F LWJGL: Licht und GL_LINES funktioniert nicht Spiele- und Multimedia-Programmierung 6
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
F LWJGL: Is undefined? Spiele- und Multimedia-Programmierung 7
F LWJGL Kamerabug Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
F LWJGL Dreidimensionaler Würfel Spiele- und Multimedia-Programmierung 15
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
P "Tiefe" in Objekten - LWJGL Spiele- und Multimedia-Programmierung 12
T LWJGL 3D Objekt Collision: Wie? Spiele- und Multimedia-Programmierung 11
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
V Komischer Fehler in LWJGL Spiele- und Multimedia-Programmierung 18
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
Y LWJGL Hintergrund Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
CookieSoft LWJGL Ubuntu 12.04 Fehler Spiele- und Multimedia-Programmierung 7
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
F lwjgl - Skysphere Spiele- und Multimedia-Programmierung 3
CookieSoft Slick und LWJGL Texture lag Spiele- und Multimedia-Programmierung 13
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
0 Grafikfehler LWJGL Spiele- und Multimedia-Programmierung 2
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
Luk10 (LWJGL) Aufwendiges Animieren von Texturen Spiele- und Multimedia-Programmierung 16
S (LWJGL) VertexBufferObjects Spiele- und Multimedia-Programmierung 20
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
H LWJGL: Fragen zum Verständnis Spiele- und Multimedia-Programmierung 7
T LWJGL Gui erstellen Spiele- und Multimedia-Programmierung 7
Kenan89 lwjgl Exception Spiele- und Multimedia-Programmierung 3
Z Anfängerfrage: Text anzeigen mit LWJGL Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben