| 547 | } |
| 548 | |
| 549 | void OBJParser::finalize_normals() { |
| 550 | if (m_normals.size() != m_faces.size() || m_corner_normals.size() == 0) |
| 551 | return; |
| 552 | |
| 553 | bool bad_normal = false; |
| 554 | const size_t num_corner_normals = m_corner_normals.size(); |
| 555 | for (const auto& n : m_normals) { |
| 556 | if (n.size() != m_vertex_per_face) { |
| 557 | std::cerr << "Normal and face type mismatch." << std::endl; |
| 558 | bad_normal = true; |
| 559 | break; |
| 560 | } |
| 561 | if (n.minCoeff() < 0 || n.maxCoeff() >= num_corner_normals) { |
| 562 | std::cerr << "Normalindex out of bound: <" << n.transpose() |
| 563 | << "> exceeds " << num_corner_normals << "." |
| 564 | << std::endl; |
| 565 | bad_normal = true; |
| 566 | break; |
| 567 | } |
| 568 | } |
| 569 | |
| 570 | if (bad_normal) { |
| 571 | m_normals.clear(); |
| 572 | return; |
| 573 | } |
| 574 | |
| 575 | NormalVector normals; |
| 576 | for (const auto& n : m_normals) { |
| 577 | for (size_t i=0; i<m_vertex_per_face; i++) { |
| 578 | normals.emplace_back(m_corner_normals[n[i]]); |
| 579 | } |
| 580 | } |
| 581 | std::swap(normals, m_corner_normals); |
| 582 | } |
| 583 | |
| 584 | void OBJParser::finalize_parameters() { |
| 585 | if (m_parameters.empty()) return; |