Explorar o código

Merge pull request #2729 from yuriks/quaternion-fix

OpenGL: Improve accuracy of quaternion interpolation
Yuri Kunde Schlesner %!s(int64=9) %!d(string=hai) anos
pai
achega
3df85a103a
Modificáronse 1 ficheiros con 5 adicións e 3 borrados
  1. 5 3
      src/video_core/renderer_opengl/gl_shader_gen.cpp

+ 5 - 3
src/video_core/renderer_opengl/gl_shader_gen.cpp

@@ -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
-    out += "vec3 normal = normalize(quaternion_rotate(normquat, surface_normal));\n";
+    // eyespace.
+    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);