Untitled

 avatar
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...