|
@@ -28,8 +28,9 @@ in vec2 uv;
|
|
|
|
|
|
out vec2 vUV;
|
|
out vec2 vUV;
|
|
out vec4 vColor;
|
|
out vec4 vColor;
|
|
|
|
+out vec3 vPositionW;
|
|
|
|
|
|
-#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
|
|
|
|
+#if defined(BILLBOARD) && !defined(BILLBOARDY) && !defined(BILLBOARDSTRETCHED)
|
|
uniform mat4 invView;
|
|
uniform mat4 invView;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -99,7 +100,7 @@ void main() {
|
|
vec2 uvOffset = vec2(uv.x , 1.0 - uv.y);
|
|
vec2 uvOffset = vec2(uv.x , 1.0 - uv.y);
|
|
vUV = (uvOffset + vec2(columnOffset, rowOffset)) * uvScale;
|
|
vUV = (uvOffset + vec2(columnOffset, rowOffset)) * uvScale;
|
|
#else
|
|
#else
|
|
- vUV = uv;
|
|
|
|
|
|
+ vUV = uv;
|
|
#endif
|
|
#endif
|
|
float ratio = age / life;
|
|
float ratio = age / life;
|
|
#ifdef COLORGRADIENTS
|
|
#ifdef COLORGRADIENTS
|
|
@@ -121,18 +122,18 @@ void main() {
|
|
|
|
|
|
vec3 yaxis = (position + worldOffset) - eyePosition;
|
|
vec3 yaxis = (position + worldOffset) - eyePosition;
|
|
yaxis.y = 0.;
|
|
yaxis.y = 0.;
|
|
- vec3 worldPos = rotate(normalize(yaxis), rotatedCorner.xyz);
|
|
|
|
|
|
+ vPositionW = rotate(normalize(yaxis), rotatedCorner.xyz);
|
|
|
|
|
|
- vec4 viewPosition = (view * vec4(worldPos, 1.0));
|
|
|
|
|
|
+ vec4 viewPosition = (view * vec4(vPositionW, 1.0));
|
|
#elif defined(BILLBOARDSTRETCHED)
|
|
#elif defined(BILLBOARDSTRETCHED)
|
|
rotatedCorner.x = cornerPos.x * cos(angle) - cornerPos.y * sin(angle);
|
|
rotatedCorner.x = cornerPos.x * cos(angle) - cornerPos.y * sin(angle);
|
|
rotatedCorner.y = cornerPos.x * sin(angle) + cornerPos.y * cos(angle);
|
|
rotatedCorner.y = cornerPos.x * sin(angle) + cornerPos.y * cos(angle);
|
|
rotatedCorner.z = 0.;
|
|
rotatedCorner.z = 0.;
|
|
|
|
|
|
vec3 toCamera = (position + worldOffset) - eyePosition;
|
|
vec3 toCamera = (position + worldOffset) - eyePosition;
|
|
- vec3 worldPos = rotateAlign(toCamera, rotatedCorner.xyz);
|
|
|
|
|
|
+ vPositionW = rotateAlign(toCamera, rotatedCorner.xyz);
|
|
|
|
|
|
- vec4 viewPosition = (view * vec4(worldPos, 1.0));
|
|
|
|
|
|
+ vec4 viewPosition = (view * vec4(vPositionW, 1.0));
|
|
#else
|
|
#else
|
|
// Rotate
|
|
// Rotate
|
|
rotatedCorner.x = cornerPos.x * cos(angle) - cornerPos.y * sin(angle);
|
|
rotatedCorner.x = cornerPos.x * cos(angle) - cornerPos.y * sin(angle);
|
|
@@ -145,26 +146,28 @@ void main() {
|
|
#else
|
|
#else
|
|
vec4 viewPosition = view * vec4((position + worldOffset), 1.0) + rotatedCorner;
|
|
vec4 viewPosition = view * vec4((position + worldOffset), 1.0) + rotatedCorner;
|
|
#endif
|
|
#endif
|
|
|
|
+
|
|
|
|
+ vPositionW = (invView * viewPosition).xyz;
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#else
|
|
#else
|
|
- // Rotate
|
|
|
|
|
|
+ // Rotate
|
|
vec3 rotatedCorner;
|
|
vec3 rotatedCorner;
|
|
rotatedCorner.x = cornerPos.x * cos(angle) - cornerPos.y * sin(angle);
|
|
rotatedCorner.x = cornerPos.x * cos(angle) - cornerPos.y * sin(angle);
|
|
rotatedCorner.y = 0.;
|
|
rotatedCorner.y = 0.;
|
|
rotatedCorner.z = cornerPos.x * sin(angle) + cornerPos.y * cos(angle);
|
|
rotatedCorner.z = cornerPos.x * sin(angle) + cornerPos.y * cos(angle);
|
|
|
|
|
|
vec3 yaxis = normalize(initialDirection);
|
|
vec3 yaxis = normalize(initialDirection);
|
|
- vec3 worldPos = rotate(yaxis, rotatedCorner);
|
|
|
|
|
|
+ vPositionW = rotate(yaxis, rotatedCorner);
|
|
|
|
|
|
- // Expand position
|
|
|
|
- vec4 viewPosition = view * vec4(worldPos, 1.0);
|
|
|
|
|
|
+ // Expand position
|
|
|
|
+ vec4 viewPosition = view * vec4(vPositionW, 1.0);
|
|
#endif
|
|
#endif
|
|
gl_Position = projection * viewPosition;
|
|
gl_Position = projection * viewPosition;
|
|
|
|
|
|
// Clip plane
|
|
// Clip plane
|
|
#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
- vec4 worldPos = invView * viewPosition;
|
|
|
|
|
|
+ vec4 worldPos = vec4(vPositionW, 1.0);
|
|
#endif
|
|
#endif
|
|
#include<clipPlaneVertex>
|
|
#include<clipPlaneVertex>
|
|
}
|
|
}
|