fix block models generation
This commit is contained in:
parent
87663e597b
commit
6f9bad0557
@ -16,7 +16,7 @@ void main() {
|
|||||||
float depth = (a_distance/256.0);
|
float depth = (a_distance/256.0);
|
||||||
float alpha = a_color.a * tex_color.a;
|
float alpha = a_color.a * tex_color.a;
|
||||||
// anyway it's any alpha-test alternative required
|
// anyway it's any alpha-test alternative required
|
||||||
if (alpha < 0.9f)
|
if (alpha < 0.5f)
|
||||||
discard;
|
discard;
|
||||||
f_color = mix(a_color * tex_color, vec4(fogColor,1.0),
|
f_color = mix(a_color * tex_color, vec4(fogColor,1.0),
|
||||||
min(1.0, pow(depth*u_fogFactor, u_fogCurve)));
|
min(1.0, pow(depth*u_fogFactor, u_fogCurve)));
|
||||||
|
|||||||
@ -63,19 +63,28 @@ void ModelBatch::draw(const model::Mesh& mesh, const glm::mat4& matrix,
|
|||||||
const glm::mat3& rotation, glm::vec3 tint,
|
const glm::mat3& rotation, glm::vec3 tint,
|
||||||
const texture_names_map* varTextures,
|
const texture_names_map* varTextures,
|
||||||
bool backlight) {
|
bool backlight) {
|
||||||
glm::vec3 gpos = matrix * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
|
||||||
gpos += lightsOffset;
|
|
||||||
glm::vec4 lights = MainBatch::sampleLight(gpos, *chunks, backlight);
|
|
||||||
setTexture(mesh.texture, varTextures);
|
setTexture(mesh.texture, varTextures);
|
||||||
size_t vcount = mesh.vertices.size();
|
size_t vcount = mesh.vertices.size();
|
||||||
const auto& vertexData = mesh.vertices.data();
|
const auto& vertexData = mesh.vertices.data();
|
||||||
|
|
||||||
|
glm::vec4 lights(1, 1, 1, 0);
|
||||||
|
if (mesh.lighting) {
|
||||||
|
glm::vec3 gpos = matrix * glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
gpos += lightsOffset;
|
||||||
|
lights = MainBatch::sampleLight(gpos, *chunks, backlight);
|
||||||
|
}
|
||||||
for (size_t i = 0; i < vcount / 3; i++) {
|
for (size_t i = 0; i < vcount / 3; i++) {
|
||||||
batch->prepare(3);
|
batch->prepare(3);
|
||||||
for (size_t j = 0; j < 3; j++) {
|
for (size_t j = 0; j < 3; j++) {
|
||||||
const auto vert = vertexData[i * 3 + j];
|
const auto vert = vertexData[i * 3 + j];
|
||||||
auto norm = rotation * vert.normal;
|
float d = 1.0f;
|
||||||
float d = glm::dot(norm, SUN_VECTOR);
|
if (mesh.lighting) {
|
||||||
d = 0.8f + d * 0.2f;
|
auto norm = rotation * vert.normal;
|
||||||
|
d = glm::dot(norm, SUN_VECTOR);
|
||||||
|
d = 0.8f + d * 0.2f;
|
||||||
|
}
|
||||||
batch->vertex(matrix * glm::vec4(vert.coord, 1.0f), vert.uv, lights*d, tint);
|
batch->vertex(matrix * glm::vec4(vert.coord, 1.0f), vert.uv, lights*d, tint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -63,7 +63,7 @@ model::Model ModelsGenerator::generate(
|
|||||||
for (size_t i = 0; i < blockDef.modelBoxes.size(); i++) {
|
for (size_t i = 0; i < blockDef.modelBoxes.size(); i++) {
|
||||||
auto& mesh =
|
auto& mesh =
|
||||||
model.addMesh("blocks:" + blockDef.modelTextures[i * 6]);
|
model.addMesh("blocks:" + blockDef.modelTextures[i * 6]);
|
||||||
mesh.lighting = !def.rt.emissive;
|
mesh.lighting = !blockDef.shadeless;
|
||||||
const UVRegion (&boxtexfaces)[6] = {
|
const UVRegion (&boxtexfaces)[6] = {
|
||||||
get_region_for(blockDef.modelTextures[i * 6], assets),
|
get_region_for(blockDef.modelTextures[i * 6], assets),
|
||||||
get_region_for(blockDef.modelTextures[i * 6 + 1], assets),
|
get_region_for(blockDef.modelTextures[i * 6 + 1], assets),
|
||||||
@ -86,7 +86,7 @@ model::Model ModelsGenerator::generate(
|
|||||||
blockDef.modelTextures[blockDef.modelBoxes.size() * 6 + i];
|
blockDef.modelTextures[blockDef.modelBoxes.size() * 6 + i];
|
||||||
|
|
||||||
auto& mesh = model.addMesh(texture);
|
auto& mesh = model.addMesh(texture);
|
||||||
mesh.lighting = !def.rt.emissive;
|
mesh.lighting = !blockDef.shadeless;
|
||||||
|
|
||||||
auto reg = get_region_for(texture, assets);
|
auto reg = get_region_for(texture, assets);
|
||||||
mesh.vertices.push_back(
|
mesh.vertices.push_back(
|
||||||
@ -108,8 +108,13 @@ model::Model ModelsGenerator::generate(
|
|||||||
{points[i * 4 + 0] - poff, glm::vec2(reg.u1, reg.v2), norm}
|
{points[i * 4 + 0] - poff, glm::vec2(reg.u1, reg.v2), norm}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
for (auto& mesh : model.meshes) {
|
||||||
|
mesh.scale(glm::vec3(0.3f));
|
||||||
|
}
|
||||||
|
return model;
|
||||||
}
|
}
|
||||||
for (auto& mesh : model.meshes) {
|
for (auto& mesh : model.meshes) {
|
||||||
|
mesh.lighting = !blockDef.shadeless;
|
||||||
switch (blockDef.model) {
|
switch (blockDef.model) {
|
||||||
case BlockModel::aabb: {
|
case BlockModel::aabb: {
|
||||||
glm::vec3 size = blockDef.hitboxes.at(0).size();
|
glm::vec3 size = blockDef.hitboxes.at(0).size();
|
||||||
|
|||||||
@ -92,7 +92,7 @@ void ParticlesRenderer::renderParticles(const Camera& camera, float delta) {
|
|||||||
batch->quad(
|
batch->quad(
|
||||||
particle.position,
|
particle.position,
|
||||||
right,
|
right,
|
||||||
up,
|
preset.globalUpVector ? glm::vec3(0, 1, 0) : up,
|
||||||
preset.size,
|
preset.size,
|
||||||
light,
|
light,
|
||||||
glm::vec3(1.0f),
|
glm::vec3(1.0f),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user