Merge pull request #2729 from yuriks/quaternion-fix

OpenGL: Improve accuracy of quaternion interpolation
This commit is contained in:
Yuri Kunde Schlesner 2017-05-28 01:24:06 -07:00 committed by GitHub
commit 3df85a103a

View File

@ -535,8 +535,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
} }
// Rotate the surface-local normal by the interpolated normal quaternion to convert it to // Rotate the surface-local normal by the interpolated normal quaternion to convert it to
// eyespace // eyespace.
out += "vec3 normal = normalize(quaternion_rotate(normquat, surface_normal));\n"; out += "vec3 normal = quaternion_rotate(normalize(normquat), surface_normal);\n";
// Gets the index into the specified lookup table for specular lighting // Gets the index into the specified lookup table for specular lighting
auto GetLutIndex = [&lighting](unsigned light_num, LightingRegs::LightingLutInput input, auto GetLutIndex = [&lighting](unsigned light_num, LightingRegs::LightingLutInput input,
@ -1002,7 +1002,9 @@ uniform sampler1D proctex_diff_lut;
// Rotate the vector v by the quaternion q // Rotate the vector v by the quaternion q
vec3 quaternion_rotate(vec4 q, vec3 v) { vec3 quaternion_rotate(vec4 q, vec3 v) {
return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v);
})"; }
)";
if (config.state.proctex.enable) if (config.state.proctex.enable)
AppendProcTexSampler(out, config); AppendProcTexSampler(out, config);