Untitled
unknown
plain_text
4 years ago
1.7 kB
5
Indexable
bool IsConvex(const std::vector<glm::vec2> &vertices) { std::vector<glm::vec3> laturi; for (int i = 0; i < vertices.size() - 1; i++) { laturi.push_back(glm::vec3(vertices.at(i + 1).x - vertices.at(i).x, vertices.at(i + 1).y - vertices.at(i).y, 1)); } laturi.push_back(glm::vec3(vertices.at(0).x - vertices.at((vertices.size() - 1)).x, vertices.at(0).y - vertices.at(vertices.size() - 1).y, 1)); for (int i = 0; i < laturi.size() - 1; i++) { glm::vec3 rez1, rez2; if ((i + 2) == laturi.size() - 1) { rez1 = glm::cross(laturi.at(i), laturi.at(i + 1)); rez2 = glm::cross(laturi.at(i + 1), laturi.at(0)); } else { if ((i + 1) == laturi.size() - 1) { rez1 = glm::cross(laturi.at(i), laturi.at(0)); rez2 = glm::cross(laturi.at(0), laturi.at(1)); } else { rez1 = glm::cross(laturi.at(i), laturi.at(i + 1)); rez2 = glm::cross(laturi.at(i + 1), laturi.at(i + 2)); } } if (rez1.z * rez2.z < 0) return false; } return true; } std::vector<glm::vec2> ComputeNormals(const std::vector<glm::vec2> &vertices) { std::vector<glm::vec2> normalsList; std::vector<glm::vec3> laturi; for (int i = 0; i < vertices.size() - 1; i++) { laturi.push_back(glm::vec3(vertices.at(i + 1).x - vertices.at(i).x, vertices.at(i + 1).y - vertices.at(i).y, 1)); } laturi.push_back(glm::vec3(vertices.at(0).x - vertices.at((vertices.size() - 1)).x, vertices.at(0).y - vertices.at(vertices.size() - 1).y, 1)); for (int i = 0; i < vertices.size(); i++) { glm::vec2 normalizata = glm::normalize(glm::vec2(laturi.at(i).y, (int)((-1) * laturi.at(i).x))); normalsList.push_back(normalizata); } return normalsList; }
Editor is loading...