0
我正在尝试执行Tomas Moller的三角形 - 三角形相交测试(http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/pubs/tritri.pdf)。glm :: dot返回一个向量
目前,我要过滤掉所有从三角形顶点之一到另一个三角形所在平面的距离不为零,且所有距离都有相同符号的情况。在我的3210函数中,我有一条线,用于计算一个三角形法线和其他顶点的点积。但是Visual Studio是告诉我:
Error 7 error C2440: '=' : cannot convert from 'glm::detail::tvec3<glm::mediump_float>' to `'float'`
这里是我的代码:
struct triangle
{
glm::vec3 vertex0, vertex1, vertex2;
triangle(glm::vec3 vert1, glm::vec3 vert2, glm::vec3 vert3)
{
vertex0 = vert1;
vertex1 = vert2;
vertex2 = vert3;
}
};
struct triangleDistance
{
float vertex0, vertex1, vertex2;
};
int sign(const double inputNumber)
{
if (inputNumber >= 0) return 1;
else return -1;
}
bool signIsTheSame(const triangleDistance inputDistance)
{
return (sign(inputDistance.vertex0) == sign(inputDistance.vertex1) &&
sign(inputDistance.vertex1) == sign(inputDistance.vertex2));
}
bool noneAreZero(const triangleDistance inputDistance)
{
return (inputDistance.vertex0 == 0 || inputDistance.vertex1 == 0 || inputDistance.vertex2 == 0);
}
glm::vec3 computeTriangleNormal(const triangle inputTriangle)
{
glm::vec3 crossTerm1, crossTerm2;
return glm::normalize(glm::cross((inputTriangle.vertex1 - inputTriangle.vertex0),
(inputTriangle.vertex2 - inputTriangle.vertex0)));
}
bool checkForCollision(const triangle triangle1, const triangle triangle2)
{
glm::vec3 triangle2Normal = computeTriangleNormal(triangle2);
glm::vec3 triangle2d = -triangle2Normal * triangle2.vertex0;
triangleDistance triangle1Distance;
triangle1Distance.vertex0 = glm::dot(triangle2Normal, triangle1.vertex0) + triangle2d;
triangle1Distance.vertex1 = glm::dot(triangle2Normal, triangle1.vertex1) + triangle2d;
triangle1Distance.vertex2 = glm::dot(triangle2Normal, triangle1.vertex2) + triangle2d;
return (signIsTheSame(triangle1Distance) && noneAreZero(triangle1Distance));
return false;
}