Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

24.01.2012, 19:15

Na ja, Kugelschieber, trotzdem ist die Render-Reihenfolge bei transparenten Objekten eben wichtig, da der Z-Buffer wie gesagt keine Transparenz kennt und er auch die Z-Werte vergleicht und speichert, die zu absolut transparenten Pixeln gehören. Damit kann sich dann eben ein korrektes Bild oder ein falsches ergeben.
Mit negativen Werte für die Near-Plane hab' ich allerdings noch nicht rumgefummelt, wofür auch.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

12

24.01.2012, 19:33

Zitat

Mit negativen Werte für die Near-Plane hab' ich allerdings noch nicht rumgefummelt, wofür auch.


Hmm muss man ja auch nicht, aber kommt ja auf gleiche raus.

Zitat

trotzdem ist die Render-Reihenfolge bei transparenten Objekten eben wichtig


Mag sein, aber die hab ich ja auch nicht geändert, trotzdem sorgt der depth Buffer dafür das der Spieler hinter der Tilemap gerendert wird, obwohl die z-Werte auf -0.1 stehen und das Sprite danach gerendert wird (übrigens hab ich auch mal positive z-Werte genommen, gleiches Ergebnis). Mich würde jetzt nurnoch interessieren woran das liegen könnte...

idontknow

unregistriert

13

24.01.2012, 19:38

Wenn du unbedingt eine Sortierung haben willst musst du alle Objekte die du zeichnest irgendwo zwischenspeichern und vorm rendern anhand eines tiefen wertes sortieren. geht nur unter umständen (drastisch) auf die geschwindigkeit (sollte keine probleme machen nur seis mal erwähnt!)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

24.01.2012, 19:55

Mag sein, aber die hab ich ja auch nicht geändert, trotzdem sorgt der depth Buffer dafür das der Spieler hinter der Tilemap gerendert wird, obwohl die z-Werte auf -0.1 stehen und das Sprite danach gerendert wird (übrigens hab ich auch mal positive z-Werte genommen, gleiches Ergebnis). Mich würde jetzt nurnoch interessieren woran das liegen könnte...

Wie dot schon sagte klingt das nach einer falschen Projektionsmatrix. Der Z-Buffer denkt sich die Z-Werte schließlich nicht selber aus, die bekommt er ja durch Dich und Deine Projektion.

Und... welche Depth-Func hast Du eigentlich aktiviert? Das könnte auch so einiges erklären.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (24.01.2012, 20:08)


DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

15

24.01.2012, 21:08

Also erstmal die Projektionsmatrix:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ortho(int left, int right, int bottom, int top, float nearp, float farp){
        mat4 m = mat4();
                
        if(left != right && bottom != top && nearp != farp){
            m.values[0] = 2/(float(right-left));
            m.values[5] = 2/(float(top-bottom));
            m.values[10] = -2/(farp-nearp);
            m.values[12] = -(float(right+left))/(float(right-left));
            m.values[13] = -(float(top+bottom))/(float(top-bottom));
            m.values[14] = -(farp+nearp)/(farp-nearp);
            m.values[15] = 1;

            *this *= m;
        }
    }


Und die glDepthFunc() ist GL_LESS (also Standard).

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

24.01.2012, 21:23

Und Zeile 13 aus Deinem Shader? Wie genau passt die dazu? *hust*
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige