#include "biome.h"
#include "perlin.h"
-int seed = 0;
+int seed = 1;
f64 get_wetness(v3s32 pos)
{
- return smooth2d((((u32) 1 << 31) + pos.x) / 128.0, (((u32) 1 << 31) + pos.z) / 128.0, 0, 3) * 0.5 + 0.5;
+ return smooth2d((((u32) 1 << 31) + pos.x) / 128.0, (((u32) 1 << 31) + pos.z) / 128.0, 0, seed + SO_WETNESS) * 0.5 + 0.5;
}
SO_BOULDER_CENTER,
SO_BOULDER,
SO_WETNESS,
+ SO_TEXTURE_OFFSET_S,
+ SO_TEXTURE_OFFSET_T,
} SeedOffset;
f64 get_wetness(v3s32 pos);
#include "client/client.h"
#include "client/client_node.h"
#include "node.h"
+#include "perlin.h"
static void render_state_biome(v3s32 pos, __attribute__((unused)) MapNode *node, Vertex3D *vertex)
{
vertex->color.v = 1.0f;
}
+static void render_texture_offset(v3s32 pos, __attribute((unused)) MapNode *node, Vertex3D *vertex)
+{
+ vertex->textureCoordinates.s += smooth2d(((u32) 1 << 31) + pos.x, ((u32) 1 << 31) + pos.z, 0, seed + SO_TEXTURE_OFFSET_S);
+ vertex->textureCoordinates.t += smooth2d(((u32) 1 << 31) + pos.x, ((u32) 1 << 31) + pos.z, 0, seed + SO_TEXTURE_OFFSET_T);
+}
+
ClientNodeDefintion client_node_definitions[NODE_UNLOADED] = {
// invalid
{
{
.texture_path = RESSOURCEPATH "textures/stone.png",
.texture = NULL,
- .render = NULL,
+ .render = &render_texture_offset,
},
// snow
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexImage2D(GL_TEXTURE_2D, 0, format, texture->width, texture->height, 0, format, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);