mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-16 17:59:56 +00:00
dd5901d351
Multiview shaders. Refactor Frustum management Rewrite shared shadow map cull mask should respect stereo Stereo savegame screencap LocalMap refactoring use the vertex buffer hint instead of the display list patch to enable/disable display lists Character preview fixes
52 lines
1.2 KiB
GLSL
52 lines
1.2 KiB
GLSL
#version @GLSLVersion
|
|
|
|
varying vec2 uv;
|
|
uniform samplerCube cubeMap;
|
|
uniform int mapping;
|
|
|
|
#define PI 3.1415926535
|
|
|
|
vec3 sphericalCoords(vec2 coords)
|
|
{
|
|
coords.x = -1 * coords.x * 2 * PI;
|
|
coords.y = (coords.y - 0.5) * PI;
|
|
|
|
vec3 result = vec3(0.0,cos(coords.y),sin(coords.y));
|
|
result = vec3(cos(coords.x) * result.y,sin(coords.x) * result.y,result.z);
|
|
|
|
return result;
|
|
}
|
|
|
|
vec3 cylindricalCoords(vec2 coords)
|
|
{
|
|
return normalize(vec3(cos(-1 * coords.x * 2 * PI),sin(-1 * coords.x * 2 * PI),coords.y * 2.0 - 1.0));
|
|
}
|
|
|
|
vec3 planetCoords(vec2 coords)
|
|
{
|
|
vec2 fromCenter = coords - vec2(0.5,0.5);
|
|
|
|
float magnitude = length(fromCenter);
|
|
|
|
fromCenter = normalize(fromCenter);
|
|
|
|
float dotProduct = dot(fromCenter,vec2(0.0,1.0));
|
|
|
|
coords.x = coords.x > 0.5 ? 0.5 - (dotProduct + 1.0) / 4.0 : 0.5 + (dotProduct + 1.0) / 4.0;
|
|
coords.y = max(0.0,1.0 - pow(magnitude / 0.5,0.5));
|
|
return sphericalCoords(coords);
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
vec3 c;
|
|
|
|
if (mapping == 0)
|
|
c = sphericalCoords(uv);
|
|
else if (mapping == 1)
|
|
c = cylindricalCoords(uv);
|
|
else
|
|
c = planetCoords(uv);
|
|
|
|
gl_FragData[0] = textureCube(cubeMap,c);
|
|
}
|