From a6a1c4dbb74c2c10baf4fef120a4206a3fd31b52 Mon Sep 17 00:00:00 2001 From: David Williams Date: Thu, 29 May 2014 19:34:43 +0200 Subject: [PATCH] Getting ready to decode normal. --- examples/DecodeOnGPU/decode.frag | 4 ++-- examples/DecodeOnGPU/decode.vert | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/DecodeOnGPU/decode.frag b/examples/DecodeOnGPU/decode.frag index c9cbf215..fb576125 100644 --- a/examples/DecodeOnGPU/decode.frag +++ b/examples/DecodeOnGPU/decode.frag @@ -11,9 +11,9 @@ void main() { // Again, for the purposes of these examples we cannot be sure that per-vertex normals are provided. A sensible fallback // is to use this little trick to compute per-fragment flat-shaded normals from the world positions using derivative operations. - vec3 normal = normalize(cross(dFdy(worldPosition.xyz), dFdx(worldPosition.xyz))); + //vec3 normal = normalize(cross(dFdy(worldPosition.xyz), dFdx(worldPosition.xyz))); // We are just using the normal as the output color, and making it lighter so it looks a bit nicer. // Obviously a real shader would also do texuring, lighting, or whatever is required for the application. - outputColor = vec4(abs(normal) * 0.5 + vec3(0.5, 0.5, 0.5), 1.0); + outputColor = vec4(abs(worldNormal.xyz) * 0.5 + vec3(0.5, 0.5, 0.5), 1.0); } diff --git a/examples/DecodeOnGPU/decode.vert b/examples/DecodeOnGPU/decode.vert index de61bc42..00675617 100644 --- a/examples/DecodeOnGPU/decode.vert +++ b/examples/DecodeOnGPU/decode.vert @@ -1,6 +1,7 @@ #version 140 in uvec4 position; // This will be the position of the vertex in model-space +in vec4 normal; // The usual matrices are provided uniform mat4 cameraToClipMatrix; @@ -10,12 +11,15 @@ uniform mat4 modelToWorldMatrix; // This will be used by the fragment shader to calculate flat-shaded normals. This is an unconventional approach // but we use it in this example framework because not all surface extractor generate surface normals. out vec4 worldPosition; +out vec4 worldNormal; void main() { vec4 decodedPosition = position; decodedPosition.xyz = decodedPosition.xyz * (1.0 / 256.0); + worldNormal = normal; + // Standard sequence of OpenGL transformations. worldPosition = modelToWorldMatrix * decodedPosition; vec4 cameraPosition = worldToCameraMatrix * worldPosition;