aboutsummaryrefslogtreecommitdiff
path: root/src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl
diff options
context:
space:
mode:
authorGDCloud <93287602+GDCloudstrike@users.noreply.github.com>2024-09-15 19:38:40 +0200
committerGitHub <noreply@github.com>2024-09-15 19:38:40 +0200
commitdda786c0183f6655a4a264edf2d75688e7fe895e (patch)
treed818890893be86d0b61f1fa17605896640999089 /src/main/resources/assets/tectech/shaders/gorgeBeam.vert.glsl
parent6d4894f688c9ae1fdd5c8cee1cd8f0d204220ff9 (diff)
downloadGT5-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.glsl77
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);
+}
+