所以我有一个任务,我必须将旋转轴作为垂直于平面的法向量返回。这是我的代码:
glm::vec3 Skeleton::returnAxis()
{
GLdouble firstPoint[3];
GLdouble secondPoint[3];
GLdouble thirdPoint[3];
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
gluUnProject(0,0,0, modelview, projection, viewport, &firstPoint[0], &firstPoint[1], &firstPoint[2]);
gluUnProject(viewport[2], 0 ,0, modelview, projection, viewport, &secondPoint[0], &secondPoint[1], &secondPoint[2]);
gluUnProject(0,viewport[3],0, modelview, projection, viewport, &thirdPoint[0], &thirdPoint[1], &thirdPoint[2]);
glm::vec3 point1 = glm::vec3(secondPoint - firstPoint);
glm::vec3 point2 = glm::vec3(thirdPoint - firstPoint);
glm::vec3 axis = glm::normalize(glm::cross(point1, point2));
return axis;
std::cout << axis.x;
}
问题是,它不会返回任何数字!只是空白。甚至在我做了一个要转移的类型转换后(上面的代码中没有显示)。
帮助!
答案 0 :(得分:2)
无法直接对GLdouble[]
数组执行向量运算。
glm::vec3 point1 = glm::vec3(secondPoint - firstPoint);
此处的减法实际上是对数组的指针(地址)执行的,并且不返回数学运算。而是计算新地址,然后再将其视为GLdouble[]
以初始化vec3。此外,由于创建了临时对象,因此在此处创建向量也不是一个好主意。
您想要做的正确代码可能是:
glm::vec3 point1(secondPoint[0] - firstPoint[0],
secondPoint[1] - firstPoint[1],
secondPoint[2] - firstPoint[2]);
类似于point2
。