float an shader übergeben + auswerten (GLSL)

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

  • float an shader übergeben + auswerten (GLSL)

    GEFIXT:
    Tippfehler
    ##########
    Hi,
    ich habe ein kleines Problem...

    Ich habe einen Shader gemacht (hier) und möchte diesen nun für meine App als Bomben-Explosion nutzen.

    Das Problem:

    liegt in der Zeile 35.... die If Abfragen funktionieren nicht, oder besser gesagt amount(Anzahl der Druckwellen) ist immer 0.
    Leider kann man mit dem GM keine int´s übergeben (Bug) und die for-Schleifen wollen nur "hardcode".
    • muss ich amount zu einen int umformen?
    • muss ich amount runden?
    • soll ich <= nutzen
    • kA....

    GML-Quellcode

    1. //
    2. // Shockwave Shader for applicaton_surf
    3. //
    4. varying vec2 v_vTexcoord;
    5. varying vec4 v_vColour;
    6. //const
    7. const float SPEED = 20.0;
    8. const float MAX_TIME = 0.1;
    9. const float WAVE_WIDTH = 0.01;
    10. const float DISTORTION = 0.1;
    11. uniform float time;
    12. uniform float posX[4];
    13. uniform float posY[4];
    14. uniform float amount;
    15. uniform vec2 screen;
    16. //def func
    17. void Shockwave(in vec2 v_vTexcoord ,inout vec2 uv);
    18. void main()
    19. {
    20. vec2 uv = v_vTexcoord;
    21. //Call function
    22. Shockwave(v_vTexcoord.xy, uv);
    23. //Output to Screen
    24. gl_FragColor = v_vColour * texture2D( gm_BaseTexture, uv );
    25. }
    26. void Shockwave(in vec2 v_vTexcoord, inout vec2 uv)
    27. {
    28. ///////////////////////////////////////////////////////////////////////////Ab hier
    29. int _loop = 4;
    30. if(amount == 1.0){
    31. _loop = 1;
    32. }else if(amount == 2.0){
    33. _loop = 2;
    34. }else if(amount == 3.0){
    35. _loop = 3;
    36. }else if(amount == 4.0){
    37. _loop = 4;
    38. }else if(amount == 5.0){
    39. _loop = 5;
    40. }else if(amount == 6.0){
    41. _loop = 6;
    42. }else if(amount == 7.0){
    43. _loop = 7;
    44. }else if(amount == 8.0){
    45. _loop = 8;
    46. }else{
    47. _loop = 0;
    48. }
    49. /////////////////////////////////////////////////////////////////////////bis hier
    50. for(int _i = 0; _i < _loop; _i++)
    51. {
    52. //Distance between mouse.xy and current pixel
    53. float _dist = distance(vec2((posX[_i] /screen.x), (posY[_i] / screen.y)), v_vTexcoord.xy);
    54. //currrent radius of the wave
    55. float _currRad = mod(time, MAX_TIME) * SPEED;
    56. //If the pixel is inside the Shockwave
    57. if(_dist > _currRad - WAVE_WIDTH &&
    58. _dist < _currRad + WAVE_WIDTH)
    59. {
    60. //The distortion (Verzerrung)
    61. //Between (0 and 1)
    62. float _diff = abs((_dist - _currRad) / WAVE_WIDTH);
    63. //manipulate the coords
    64. uv = vec2(uv.x + _diff * DISTORTION , uv.y + _diff * DISTORTION);
    65. }
    66. }
    67. }
    Alles anzeigen

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