trackgen: fix double sided normals
git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9473 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: e80bca4f9f393817be4061918f20e9dba886be68 Former-commit-id: 48b0dff667dc927c6452b2630b2ecccb95442a73
This commit is contained in:
parent
cb897f2621
commit
a809475b47
2 changed files with 8 additions and 5 deletions
|
@ -1205,7 +1205,7 @@ void Ac3d::Object::generateNormals()
|
||||||
V3d vertex = { 0.0, 0.0, 0.0 };
|
V3d vertex = { 0.0, 0.0, 0.0 };
|
||||||
V3d normal = { 0.0, 0.0, 0.0 };
|
V3d normal = { 0.0, 0.0, 0.0 };
|
||||||
|
|
||||||
bool operator == (const Vertex &other) const
|
bool equals(const Vertex &other) const
|
||||||
{
|
{
|
||||||
return (vertex.equals(other.vertex) && normal.equals(other.normal));
|
return (vertex.equals(other.vertex) && normal.equals(other.normal));
|
||||||
}
|
}
|
||||||
|
@ -1276,7 +1276,10 @@ void Ac3d::Object::generateNormals()
|
||||||
vertex.normal = m_normals[index][0];
|
vertex.normal = m_normals[index][0];
|
||||||
for (size_t i = 1; i < m_normals[index].size(); i++)
|
for (size_t i = 1; i < m_normals[index].size(); i++)
|
||||||
{
|
{
|
||||||
if (object.crease.initialized || vertex.normal.angleDegrees(m_normals[index][i]) < object.crease.value)
|
double angle = vertex.normal.angleDegrees(m_normals[index][i]);
|
||||||
|
if (object.crease.initialized && angle < object.crease.value)
|
||||||
|
vertex.normal += m_normals[index][i];
|
||||||
|
else if (angle < 179.999)
|
||||||
vertex.normal += m_normals[index][i];
|
vertex.normal += m_normals[index][i];
|
||||||
}
|
}
|
||||||
vertex.normal.normalize();
|
vertex.normal.normalize();
|
||||||
|
@ -1361,9 +1364,9 @@ void Ac3d::Object::generateNormals()
|
||||||
{
|
{
|
||||||
bool found = false;
|
bool found = false;
|
||||||
const Vertex vertex = triangle.vertex(i, *this);
|
const Vertex vertex = triangle.vertex(i, *this);
|
||||||
for (size_t j = 0; j < new_vertices.size(); j++)
|
for (size_t j = 0, end = new_vertices.size(); j < end; j++)
|
||||||
{
|
{
|
||||||
if (new_vertices[j] == vertex)
|
if (new_vertices[j].equals(vertex))
|
||||||
{
|
{
|
||||||
triangle.m_vertex_index[i] = int(j);
|
triangle.m_vertex_index[i] = int(j);
|
||||||
found = true;
|
found = true;
|
||||||
|
|
|
@ -97,7 +97,7 @@ struct Ac3d
|
||||||
}
|
}
|
||||||
bool equals(const V3d &other) const
|
bool equals(const V3d &other) const
|
||||||
{
|
{
|
||||||
static constexpr double SMALL_NUM = static_cast<double>(std::numeric_limits<double>::epsilon());
|
static constexpr double SMALL_NUM = static_cast<double>(std::numeric_limits<float>::epsilon());
|
||||||
|
|
||||||
return std::abs(x() - other.x()) < SMALL_NUM &&
|
return std::abs(x() - other.x()) < SMALL_NUM &&
|
||||||
std::abs(y() - other.y()) < SMALL_NUM &&
|
std::abs(y() - other.y()) < SMALL_NUM &&
|
||||||
|
|
Loading…
Reference in a new issue