forked from LeenkxTeam/LNXSDK
Update Files
This commit is contained in:
26
leenkx/Shaders/std/vr.glsl
Normal file
26
leenkx/Shaders/std/vr.glsl
Normal file
@ -0,0 +1,26 @@
|
||||
uniform mat4 U; // Undistortion
|
||||
uniform float maxRadSq;
|
||||
|
||||
// GoogleVR Distortion using Vertex Displacement
|
||||
float distortionFactor(const float rSquared) {
|
||||
float ret = 0.0;
|
||||
ret = rSquared * (ret + U[1][1]);
|
||||
ret = rSquared * (ret + U[0][1]);
|
||||
ret = rSquared * (ret + U[3][0]);
|
||||
ret = rSquared * (ret + U[2][0]);
|
||||
ret = rSquared * (ret + U[1][0]);
|
||||
ret = rSquared * (ret + U[0][0]);
|
||||
return ret + 1.0;
|
||||
}
|
||||
// Convert point from world space to undistorted camera space
|
||||
vec4 undistort(const mat4 WV, vec4 pos) {
|
||||
// Go to camera space
|
||||
pos = WV * pos;
|
||||
const float nearClip = 0.1;
|
||||
if (pos.z <= -nearClip) { // Reminder: Forward is -Z
|
||||
// Undistort the point's coordinates in XY
|
||||
float r2 = clamp(dot(pos.xy, pos.xy) / (pos.z * pos.z), 0.0, maxRadSq);
|
||||
pos.xy *= distortionFactor(r2);
|
||||
}
|
||||
return pos;
|
||||
}
|
Reference in New Issue
Block a user