Skip to content
Snippets Groups Projects
Commit 9478ce49 authored by Alexander Gauggel's avatar Alexander Gauggel
Browse files

[#87] Compute bounding sphere per meshlet

parent 8fe90478
No related branches found
No related tags found
1 merge request!74Resolve "Mesh Shader Implementation"
......@@ -15,10 +15,12 @@ namespace vkcv::meshlet {
};
struct Meshlet {
uint32_t vertexOffset;
uint32_t vertexCount;
uint32_t indexOffset;
uint32_t indexCount;
uint32_t vertexOffset;
uint32_t vertexCount;
uint32_t indexOffset;
uint32_t indexCount;
glm::vec3 meanPosition;
float boundingSphereRadius;
};
struct MeshShaderModelData {
......
......@@ -110,6 +110,24 @@ MeshShaderModelData createMeshShaderModelData(
data.vertices.push_back(v);
}
// compute mean position
meshlet.meanPosition = glm::vec3(0);
const uint32_t meshletLastVertexIndex = meshlet.vertexOffset + meshlet.vertexCount;
for (uint32_t vertexIndex = meshlet.vertexOffset; vertexIndex < meshletLastVertexIndex; vertexIndex++) {
const Vertex& v = data.vertices[vertexIndex];
meshlet.meanPosition += v.position;
}
meshlet.meanPosition /= meshlet.vertexCount;
// compute bounding sphere radius
meshlet.boundingSphereRadius = 0.f;
for (uint32_t vertexIndex = meshlet.vertexOffset; vertexIndex < meshletLastVertexIndex; vertexIndex++) {
const Vertex& v = data.vertices[vertexIndex];
const float d = glm::distance(v.position, meshlet.meanPosition);
meshlet.boundingSphereRadius = glm::max(meshlet.boundingSphereRadius, d);
}
data.meshlets.push_back(meshlet);
}
......
......@@ -31,10 +31,12 @@ layout(std430, binding = 1) readonly buffer indexBuffer
};
struct Meshlet{
uint vertexOffset;
uint vertexCount;
uint indexOffset;
uint indexCount;
uint vertexOffset;
uint vertexCount;
uint indexOffset;
uint indexCount;
vec3 meanPosition;
float boundingSphereRadius;
};
layout(std430, binding = 2) readonly buffer meshletBuffer
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment