Smoothed water LOD in OpenGL
This commit is contained in:
parent
c0a4e93c52
commit
bf42b2bab8
2 changed files with 11 additions and 5 deletions
|
@ -517,14 +517,14 @@ const Texture2D *NoiseFunctionSimplex::getNormalTexture() {
|
|||
// TODO Make texture tileable
|
||||
double dx = to_double(x) / to_double(width);
|
||||
double dz = to_double(z) / to_double(height);
|
||||
double vcenter = noiseSimplexGet2DValue(scale * dx, scale * dz) - 0.5;
|
||||
double vsouth = noiseSimplexGet2DValue(scale * dx, scale * dz + offset) - 0.5;
|
||||
double veast = noiseSimplexGet2DValue(scale * dx + offset, scale * dz) - 0.5;
|
||||
double vcenter = noiseSimplexGet2DValue(scale * dx, scale * dz);
|
||||
double vsouth = noiseSimplexGet2DValue(scale * dx, scale * dz + offset);
|
||||
double veast = noiseSimplexGet2DValue(scale * dx + offset, scale * dz);
|
||||
|
||||
Vector3 normal = Geometry::getNormalFromTriangle(
|
||||
Vector3(0.0, vcenter, 0.0), Vector3(0.0, vsouth, offset), Vector3(offset, veast, 0.0));
|
||||
|
||||
_normalTexture->setPixel(x, z, Color(normal.x + 0.5, normal.y + 0.5, normal.z + 0.5));
|
||||
_normalTexture->setPixel(x, z, Color(normal.x * 0.5 + 0.5, normal.y * 0.5 + 0.5, normal.z * 0.5 + 0.5));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,13 @@ vec3 noiseNormal2d(float[4] data, vec2 location, float detail)
|
|||
{
|
||||
// TODO offsets
|
||||
// TODO parametrized texture scaling
|
||||
normal += texture(simplexSampler, location * scaling / 15.0).xyz - vec3(0.5);
|
||||
float factor;
|
||||
if (height * step_height <= detail) {
|
||||
factor = (height - detail) / (height - height * step_height);
|
||||
} else {
|
||||
factor = 1.0;
|
||||
}
|
||||
normal += (texture(simplexSampler, location * scaling / 15.0).xyz * 2.0 - 1.0) * factor;
|
||||
scaling *= step_scaling;
|
||||
height *= step_height;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue