Subsurf: Add API to provide vertex sharpness
Currently unused, added for the future and API completeness.
This commit is contained in:
parent
4fe14d6a26
commit
5b3b0ed54f
@ -379,13 +379,18 @@ inline bool TopologyRefinerFactory<TopologyRefinerData>::assignComponentTags(
|
||||
if (converter->isInfiniteSharpVertex(converter, vertex_index)) {
|
||||
setBaseVertexSharpness(
|
||||
refiner, vertex_index, Crease::SHARPNESS_INFINITE);
|
||||
} else if (vertex_edges.size() == 2) {
|
||||
continue;
|
||||
}
|
||||
float sharpness = converter->getVertexSharpness(converter, vertex_index);
|
||||
if (vertex_edges.size() == 2) {
|
||||
const int edge0 = vertex_edges[0], edge1 = vertex_edges[1];
|
||||
const float sharpness0 = refiner._levels[0]->getEdgeSharpness(edge0);
|
||||
const float sharpness1 = refiner._levels[0]->getEdgeSharpness(edge1);
|
||||
const float sharpness = std::min(sharpness0, sharpness1);
|
||||
setBaseVertexSharpness(refiner, vertex_index, sharpness);
|
||||
// TODO(sergey): Find a better mixing between edge and vertex sharpness.
|
||||
sharpness += std::min(sharpness0, sharpness1);
|
||||
sharpness = std::min(sharpness, 1.0f);
|
||||
}
|
||||
setBaseVertexSharpness(refiner, vertex_index, sharpness);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -111,6 +111,10 @@ typedef struct OpenSubdiv_Converter {
|
||||
bool (*isInfiniteSharpVertex)(const struct OpenSubdiv_Converter* converter,
|
||||
const int vertex_index);
|
||||
|
||||
// If vertex is not infinitely sharp, this is it's actual sharpness.
|
||||
float (*getVertexSharpness)(const struct OpenSubdiv_Converter* converter,
|
||||
const int vertex_index);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Face-varying data.
|
||||
|
||||
|
@ -171,6 +171,12 @@ static bool is_infinite_sharp_vertex(const OpenSubdiv_Converter *converter,
|
||||
vertex_index);
|
||||
}
|
||||
|
||||
static float get_vertex_sharpness(const OpenSubdiv_Converter *UNUSED(converter),
|
||||
int UNUSED(manifold_vertex_index))
|
||||
{
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
static int get_num_uv_layers(const OpenSubdiv_Converter *converter)
|
||||
{
|
||||
ConverterStorage *storage = converter->user_data;
|
||||
@ -278,6 +284,7 @@ static void init_functions(OpenSubdiv_Converter *converter)
|
||||
converter->getNumVertexFaces = NULL;
|
||||
converter->getVertexFaces = NULL;
|
||||
converter->isInfiniteSharpVertex = is_infinite_sharp_vertex;
|
||||
converter->getVertexSharpness = get_vertex_sharpness;
|
||||
|
||||
converter->getNumUVLayers = get_num_uv_layers;
|
||||
converter->precalcUVLayer = precalc_uv_layer;
|
||||
|
Loading…
Reference in New Issue
Block a user