Isometrisches Feld komplett mit Shadern zeichnen

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Isometrisches Feld komplett mit Shadern zeichnen

    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:

    Quellcode

    1. varying vec2 v_vTexcoord;
    2. varying vec4 v_vColour;
    3. uniform sampler2D terrain_tiles;
    4. vec4 v_vDrawC;
    5. uniform vec2 view_pos;
    6. vec2 ss;
    7. void main()
    8. {
    9. ss = (v_vTexcoord+view_pos)/32.-vec2(0.5/1024.,0.5/768.);
    10. ss.x = (2./3.)*ss.x+(2.)*ss.y;
    11. ss.y = 4.*ss.y-ss.x;
    12. if(texture2D( gm_BaseTexture, ss).r == 1.)
    13. v_vDrawC = vec4(1.,1.,1.,1.);
    14. else
    15. v_vDrawC = vec4(0.,0.,0.,0.);
    16. gl_FragColor = v_vColour * v_vDrawC;
    17. }
    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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Chris987 ()