Ich bin dabei ein Isometrisches Feld zu zeichnen. Um diese Aufgabe komplett der Grafikkarte zu überlassen, will ich dabei Shader benutzen. Ich habe dafür einen Ansatz und mit dem funktioniert es auch sehr gut. Ich benutze eine Surface die so groß ist, dass sie den ganzen Bildschirm bedeckt. In dieser Surface habe ich einmalig Punkte markiert, welche die verschiedenen Geländeformation beinhaltet. In diesem Fall habe ich jetzt nur zwei. Anschließend lasse ich die Surface mit dem Shader zeichnen welchem eine Textur übergeben wird die die verschiedenen Tiles des Isometrischen Feldes beinhaltet. Die Performance dabei ist extrem. Mit meiner herkömmlichen Methode habe ich 80 FPS ereicht, mit den Shader 1900FPS. Dabei kommen aber verschiedene Probleme auf. Hier erstmal aber der Fragment Shader:
Alles anzeigen
Meine Probleme sind wie folgt:
Die Berechnungen sind sehr ungenau und diese hier stammen aus wilden Berechnungen von mir, die ich mit Zufall aber ich selbst nicht verstehe herausgefunden habe.
Wie kann ich auf dieser Basis bestimmte Bereiche einer Tile Textur zeichnen lassen? Mein Problem ist dass er versucht die Farben zwischen den Pixeln zu interpolieren wodurch ich sie sehr ineffektiev abfragen kann.
Viele würden vieleicht sagen dass ich das ganze mit Tiles machen soll, diese sind mir für mein Vorhaben wiederrum zu langsam und ich möchte eigentlich dass die CPU sich komplett aus der Grafik heraushält und alles von der GPU gemacht werden soll. Einer der Hauptfragen ist wie ich Isometrischen Koordinaten in Kartesische Koordinaten umwandle.
Freue mich auf Hilfe
Quellcode
- varying vec2 v_vTexcoord;
- varying vec4 v_vColour;
- uniform sampler2D terrain_tiles;
- vec4 v_vDrawC;
- uniform vec2 view_pos;
- vec2 ss;
- void main()
- {
- ss = (v_vTexcoord+view_pos)/32.-vec2(0.5/1024.,0.5/768.);
- ss.x = (2./3.)*ss.x+(2.)*ss.y;
- ss.y = 4.*ss.y-ss.x;
- if(texture2D( gm_BaseTexture, ss).r == 1.)
- v_vDrawC = vec4(1.,1.,1.,1.);
- else
- v_vDrawC = vec4(0.,0.,0.,0.);
- gl_FragColor = v_vColour * v_vDrawC;
- }
Meine Probleme sind wie folgt:
Die Berechnungen sind sehr ungenau und diese hier stammen aus wilden Berechnungen von mir, die ich mit Zufall aber ich selbst nicht verstehe herausgefunden habe.
Wie kann ich auf dieser Basis bestimmte Bereiche einer Tile Textur zeichnen lassen? Mein Problem ist dass er versucht die Farben zwischen den Pixeln zu interpolieren wodurch ich sie sehr ineffektiev abfragen kann.
Viele würden vieleicht sagen dass ich das ganze mit Tiles machen soll, diese sind mir für mein Vorhaben wiederrum zu langsam und ich möchte eigentlich dass die CPU sich komplett aus der Grafik heraushält und alles von der GPU gemacht werden soll. Einer der Hauptfragen ist wie ich Isometrischen Koordinaten in Kartesische Koordinaten umwandle.
Freue mich auf Hilfe
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Chris987 ()