try different normal encoding
This commit is contained in:
parent
e67f4e8c62
commit
c2112d68aa
@ -544,18 +544,41 @@ public class ExtrusionRenderer extends LayerRenderer {
|
|||||||
+ " color = u_color[3] * z;"
|
+ " color = u_color[3] * z;"
|
||||||
+ " } else {"
|
+ " } else {"
|
||||||
// normalize face x/y direction
|
// normalize face x/y direction
|
||||||
+ " vec2 n = (a_light / 255.0 - 0.5) * 2.0;"
|
+ " vec2 enc = (a_light / 255.0);"
|
||||||
|
+ " vec2 fenc = enc * 4.0 - 2.0;"
|
||||||
|
+ " float f = dot(fenc, fenc);"
|
||||||
|
+ " float g = sqrt(1.0 - f / 4.0);"
|
||||||
|
+ " vec3 r_norm;"
|
||||||
|
+ " r_norm.xy = fenc * g;"
|
||||||
|
+ " r_norm.z = 1.0 - f / 2.0;"
|
||||||
|
|
||||||
// normal points up or down (1,-1)
|
// normal points up or down (1,-1)
|
||||||
+ " float dir = 1.0 - (2.0 * abs(mod(a_light.x,2.0)));"
|
////+ " float dir = 1.0 - (2.0 * abs(mod(a_light.x,2.0)));"
|
||||||
// recreate face normal vector
|
// recreate face normal vector
|
||||||
+ " vec3 r_norm = vec3(n.xy, dir * (1.0 - length(n.xy)));"
|
///+ " vec3 r_norm = vec3(n.xy, dir * (1.0 - length(n.xy)));"
|
||||||
+ " vec3 light = normalize(vec3(-0.4,0.4,-1.0));"
|
|
||||||
|
+ " vec3 light = normalize(vec3(-0.4,0.4,1.0));"
|
||||||
+ " float l = (1.0 + dot(r_norm, light)) / 2.0;"
|
+ " float l = (1.0 + dot(r_norm, light)) / 2.0;"
|
||||||
+ " l = 0.4 + l * 0.6;"
|
|
||||||
+ " l = (l + (0.9 + clamp(a_pos.z / 4096.0, 0.0, 0.2))) / 2.0;"
|
/** ambient */
|
||||||
|
//+ " l = 0.2 + l * 0.8;"
|
||||||
|
/** fake-ssao by height */
|
||||||
|
+ " l = l + (clamp(a_pos.z / 8192.0, 0.0, 0.1) - 0.05);"
|
||||||
+ " color = vec4(l, l, l-0.02, 1.0);"
|
+ " color = vec4(l, l, l-0.02, 1.0);"
|
||||||
+ "}}}";
|
+ "}}}";
|
||||||
|
|
||||||
|
// vec3 decode(vec2 enc)
|
||||||
|
// {
|
||||||
|
// vec2 fenc = enc * 4.0 - 2.0;
|
||||||
|
// float f = dot(fenc, fenc);
|
||||||
|
// float g = sqrt(1.0 - f / 4.0);
|
||||||
|
//
|
||||||
|
// vec3 n;
|
||||||
|
// n.xy = fenc * g;
|
||||||
|
// n.z = 1.0 - f / 2.0;
|
||||||
|
// return n;
|
||||||
|
// }
|
||||||
|
|
||||||
final static String extrusionFragmentShader = ""
|
final static String extrusionFragmentShader = ""
|
||||||
+ "precision mediump float;"
|
+ "precision mediump float;"
|
||||||
+ "varying vec4 color;"
|
+ "varying vec4 color;"
|
||||||
|
@ -156,9 +156,15 @@ public class ExtrusionLayer extends RenderElement {
|
|||||||
double len = Math.sqrt(cx * cx + cy * cy + cz * cz);
|
double len = Math.sqrt(cx * cx + cy * cy + cz * cz);
|
||||||
|
|
||||||
// packing the normal in two bytes
|
// packing the normal in two bytes
|
||||||
int mx = FastMath.clamp(127 + (int) ((cx / len) * 128), 0, 0xff);
|
//(cx / len) / p + 0.5
|
||||||
int my = FastMath.clamp(127 + (int) ((cy / len) * 128), 0, 0xff);
|
double p = Math.sqrt((cz / len) * 8.0 + 8.0);
|
||||||
short normal = (short) ((my << 8) | (mx & NORMAL_DIR_MASK) | (cz > 0 ? 1 : 0));
|
int mx = FastMath.clamp(127 + (int) ((cx / len / p) * 128), 0, 255);
|
||||||
|
int my = FastMath.clamp(127 + (int) ((cy / len / p) * 128), 0, 255);
|
||||||
|
short normal = (short) ((my << 8) | mx);
|
||||||
|
|
||||||
|
// int mx = FastMath.clamp(127 + (int) ((cx / len) * 128), 0, 0xff);
|
||||||
|
// int my = FastMath.clamp(127 + (int) ((cy / len) * 128), 0, 0xff);
|
||||||
|
// short normal = (short) ((my << 8) | (mx & NORMAL_DIR_MASK) | (cz > 0 ? 1 : 0));
|
||||||
|
|
||||||
if (v == VertexItem.SIZE) {
|
if (v == VertexItem.SIZE) {
|
||||||
mCurVertices.used = VertexItem.SIZE;
|
mCurVertices.used = VertexItem.SIZE;
|
||||||
@ -193,6 +199,14 @@ public class ExtrusionLayer extends RenderElement {
|
|||||||
mNumVertices += vertexCnt; //(vertexCnt / 3);
|
mNumVertices += vertexCnt; //(vertexCnt / 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// private void encodeNormal(float v[], int offset) {
|
||||||
|
// var p = Math.sqrt(cartesian.z * 8.0 + 8.0);
|
||||||
|
// var result = new Cartesian2();
|
||||||
|
// result.x = cartesian.x / p + 0.5;
|
||||||
|
// result.y = cartesian.y / p + 0.5;
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
|
//
|
||||||
public void addNoNormal(MapElement element) {
|
public void addNoNormal(MapElement element) {
|
||||||
if (element.type != GeometryType.TRIS)
|
if (element.type != GeometryType.TRIS)
|
||||||
return; //FIXME throw
|
return; //FIXME throw
|
||||||
|
Loading…
x
Reference in New Issue
Block a user