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".
Alles anzeigen
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
- //
- // Shockwave Shader for applicaton_surf
- //
- varying vec2 v_vTexcoord;
- varying vec4 v_vColour;
- //const
- const float SPEED = 20.0;
- const float MAX_TIME = 0.1;
- const float WAVE_WIDTH = 0.01;
- const float DISTORTION = 0.1;
- uniform float time;
- uniform float posX[4];
- uniform float posY[4];
- uniform float amount;
- uniform vec2 screen;
- //def func
- void Shockwave(in vec2 v_vTexcoord ,inout vec2 uv);
- void main()
- {
- vec2 uv = v_vTexcoord;
- //Call function
- Shockwave(v_vTexcoord.xy, uv);
- //Output to Screen
- gl_FragColor = v_vColour * texture2D( gm_BaseTexture, uv );
- }
- void Shockwave(in vec2 v_vTexcoord, inout vec2 uv)
- {
- ///////////////////////////////////////////////////////////////////////////Ab hier
- int _loop = 4;
- if(amount == 1.0){
- _loop = 1;
- }else if(amount == 2.0){
- _loop = 2;
- }else if(amount == 3.0){
- _loop = 3;
- }else if(amount == 4.0){
- _loop = 4;
- }else if(amount == 5.0){
- _loop = 5;
- }else if(amount == 6.0){
- _loop = 6;
- }else if(amount == 7.0){
- _loop = 7;
- }else if(amount == 8.0){
- _loop = 8;
- }else{
- _loop = 0;
- }
- /////////////////////////////////////////////////////////////////////////bis hier
- for(int _i = 0; _i < _loop; _i++)
- {
- //Distance between mouse.xy and current pixel
- float _dist = distance(vec2((posX[_i] /screen.x), (posY[_i] / screen.y)), v_vTexcoord.xy);
- //currrent radius of the wave
- float _currRad = mod(time, MAX_TIME) * SPEED;
- //If the pixel is inside the Shockwave
- if(_dist > _currRad - WAVE_WIDTH &&
- _dist < _currRad + WAVE_WIDTH)
- {
- //The distortion (Verzerrung)
- //Between (0 and 1)
- float _diff = abs((_dist - _currRad) / WAVE_WIDTH);
- //manipulate the coords
- uv = vec2(uv.x + _diff * DISTORTION , uv.y + _diff * DISTORTION);
- }
- }
- }
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von glim888 ()