瀏覽代碼

Add Cel Shading example;

bjorn 5 年之前
父節點
當前提交
273461ec0d
共有 1 個文件被更改,包括 39 次插入0 次删除
  1. 39 0
      examples/Effects/Cel_Shading/main.lua

+ 39 - 0
examples/Effects/Cel_Shading/main.lua

@@ -0,0 +1,39 @@
+function lovr.load()
+  shader = lovr.graphics.newShader([[
+    out vec3 vNormal;
+    vec4 position(mat4 projection, mat4 transform, vec4 vertex) {
+      vNormal = lovrNormalMatrix * lovrNormal;
+      return projection * transform * vertex;
+    }
+  ]], [[
+    #define BANDS 8.0
+    const vec3 lightDirection = vec3(-1., -1., -1.);
+    in vec3 vNormal;
+
+    vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) {
+      vec3 L = normalize(-lightDirection);
+      vec3 N = normalize(vNormal);
+      float normal = .5 + dot(N, L) * .5;
+
+      vec3 baseColor = graphicsColor.rgb * normal;
+      vec3 clampedColor = round(baseColor * BANDS) / BANDS;
+
+      return vec4(clampedColor, graphicsColor.a);
+    }
+  ]])
+end
+
+function lovr.draw()
+  lovr.graphics.setShader(shader)
+
+  lovr.graphics.setColor(0, 0, 1)
+  lovr.graphics.sphere(0, 1.7, -1, .2)
+
+  lovr.graphics.setColor(0, 1, 0)
+  lovr.graphics.sphere(-.5, 1.7, -1, .2)
+
+  lovr.graphics.setColor(1, 0, 0)
+  lovr.graphics.sphere(.5, 1.7, -1, .2)
+
+  lovr.graphics.setShader()
+end