feat: process external custom block models for variable textures

This commit is contained in:
MihailRis
2025-05-02 15:12:01 +03:00
parent 43c76c92ff
commit 9a0f6b23b0
4 changed files with 81 additions and 21 deletions
+32 -9
View File
@@ -39,6 +39,22 @@ void Mesh::addPlane(
vertices.push_back({pos-right+up, {uv.u1, uv.v2}, norm});
}
void Mesh::addRect(
const glm::vec3& pos,
const glm::vec3& right,
const glm::vec3& up,
const glm::vec3& norm,
const UVRegion& uv
) {
vertices.push_back({pos-right-up, {uv.u1, uv.v1}, norm});
vertices.push_back({pos+right-up, {uv.u2, uv.v1}, norm});
vertices.push_back({pos+right+up, {uv.u2, uv.v2}, norm});
vertices.push_back({pos-right-up, {uv.u1, uv.v1}, norm});
vertices.push_back({pos+right+up, {uv.u2, uv.v2}, norm});
vertices.push_back({pos-right+up, {uv.u1, uv.v2}, norm});
}
void Mesh::addBox(const glm::vec3& pos, const glm::vec3& size) {
addPlane(pos+Z*size, X*size, Y*size, Z);
addPlane(pos-Z*size, -X*size, Y*size, -Z);
@@ -51,16 +67,23 @@ void Mesh::addBox(const glm::vec3& pos, const glm::vec3& size) {
}
void Mesh::addBox(
const glm::vec3& pos, const glm::vec3& size, const UVRegion (&uvs)[6]
const glm::vec3& pos,
const glm::vec3& size,
const UVRegion (&uvs)[6],
const bool enabledSides[6]
) {
addPlane(pos+Z*size, X*size, Y*size, Z, uvs[0]);
addPlane(pos-Z*size, -X*size, Y*size, -Z, uvs[1]);
addPlane(pos+Y*size, X*size, -Z*size, Y, uvs[2]);
addPlane(pos-Y*size, X*size, Z*size, -Y, uvs[3]);
addPlane(pos+X*size, -Z*size, Y*size, X, uvs[4]);
addPlane(pos-X*size, Z*size, Y*size, -X, uvs[5]);
if (enabledSides[0]) // north
addPlane(pos+Z*size, X*size, Y*size, Z, uvs[0]);
if (enabledSides[1]) // south
addPlane(pos-Z*size, -X*size, Y*size, -Z, uvs[1]);
if (enabledSides[2]) // top
addPlane(pos+Y*size, X*size, -Z*size, Y, uvs[2]);
if (enabledSides[3]) // bottom
addPlane(pos-Y*size, X*size, Z*size, -Y, uvs[3]);
if (enabledSides[4]) // west
addPlane(pos+X*size, -Z*size, Y*size, X, uvs[4]);
if (enabledSides[5]) // east
addPlane(pos-X*size, Z*size, Y*size, -X, uvs[5]);
}
void Mesh::scale(const glm::vec3& size) {