diff options
author | GDCloud <93287602+GDCloudstrike@users.noreply.github.com> | 2024-09-15 19:38:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-15 19:38:40 +0200 |
commit | dda786c0183f6655a4a264edf2d75688e7fe895e (patch) | |
tree | d818890893be86d0b61f1fa17605896640999089 /src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl | |
parent | 6d4894f688c9ae1fdd5c8cee1cd8f0d204220ff9 (diff) | |
download | GT5-Unofficial-dda786c0183f6655a4a264edf2d75688e7fe895e.tar.gz GT5-Unofficial-dda786c0183f6655a4a264edf2d75688e7fe895e.tar.bz2 GT5-Unofficial-dda786c0183f6655a4a264edf2d75688e7fe895e.zip |
Godforge finale (#3080)
Co-authored-by: BucketBrigade <138534411+CookieBrigade@users.noreply.github.com>
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: serenibyss <10861407+serenibyss@users.noreply.github.com>
Diffstat (limited to 'src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl')
-rw-r--r-- | src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl b/src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl new file mode 100644 index 0000000000..696d4d0df7 --- /dev/null +++ b/src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl @@ -0,0 +1,77 @@ +#version 120 + +attribute float a_VertexID; + + +uniform float u_SegmentQuads; +uniform float u_Time; + +//X = radius +//Y = z offset +//Z = transparency +uniform vec3 u_SegmentArray[11]; +uniform vec3 u_CameraPosition; +uniform mat4 u_ModelMatrix; + + + +varying vec2 v_TexCoord; +varying vec2 v_localPosition; +varying float v_Transparency; + + +const float PI = 3.1415926535897; + +float getAngle(int quadID, int localID){ + int id_offset = (localID > 1 && localID < 5)? 0:1; + return ((PI)*(quadID+id_offset))/u_SegmentQuads; +} + +void main() { + + int id = int(a_VertexID); + int segments = (u_SegmentArray.length()-1); + int quads = int(u_SegmentQuads); + + int localID = int(mod(a_VertexID,6.0)); //Local id of the vertex within a face + int quadID = int(mod(float(id/6),quads)); //Local id of a quad within a segment + int segmentID = int(id/(quads*6)); + segmentID = int(min(float(segmentID),float(segments-1))); + + float radius0 = u_SegmentArray[segmentID].x; + float radius1 = u_SegmentArray[segmentID+1].x; + + float offset0 = u_SegmentArray[segmentID].y; + float offset1 = u_SegmentArray[segmentID+1].y; + + float trans0 = u_SegmentArray[segmentID].z; + float trans1 = u_SegmentArray[segmentID+1].z; + + float slope = (radius1-radius0)/(offset1-offset0); + + + float cameraAngle = atan(u_CameraPosition.y,u_CameraPosition.x); + float staticAngle = getAngle(quadID,localID); + + + float angle = staticAngle+(cameraAngle-PI/2); + + float offset = (localID > 0 && localID < 4)?offset0:offset1; + float radius = (localID > 0 && localID < 4)?radius0:radius1; + v_Transparency = (localID > 0 && localID < 4)?trans0:trans1; + + //radius = min(radius,length(u_CameraPosition.xy)); + + vec3 localPosition = vec3(cos(angle)*radius,sin(angle)*radius,offset); + vec4 worldPosition = u_ModelMatrix*vec4(localPosition,1); + + gl_Position = gl_ModelViewProjectionMatrix * worldPosition; + + v_localPosition = localPosition.xy; + + float timer = u_Time/240; + + float heightOffset = (offset/256) + timer; + v_TexCoord = vec2(heightOffset,angle/(2*PI)+heightOffset/3 + timer); +} + |