Untitled
unknown
plain_text
5 years ago
1.7 kB
6
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...