重载'[]'的glm :: vec3加法错误

时间:2013-06-06 21:21:05

标签: c++ vector operator-overloading glm-math

在使用返回glm :: vec3的重载[]运算符时,我遇到了将多个向量加法串联在一起的问题。

我通过“删除”我的添加内容来解决这个问题(将每个内容放在它自己的声明中)但是我真的想知道它为什么会发生(也许我的[]运算符做错了? )。

NVecstd::vector<glm::vec3>的包装类,它的[]重载超载。这样做的目的是处理out of bounds []调用(边界是他们需要的,而不是标准的索引边界)。

操作

glm::vec3 &Terrain::NVec::operator[](int n)
{
    if(n>=0 && n < std::vector<glm::vec3>::size() &&      //special out of bounds checking
       n-(*i)*width*2 != width*2 && n-(*i)*width*2 != -1) //i is a pointer to an int somewhere
        return glm::vec3(std::vector<glm::vec3>::operator[](n).x);  //default [] operator for std::vector<glm::vec3>
    else{
        count--;              //keeps track of how many were out of bounds
        return glm::vec3(0);  //returns a {0,0,0} vector. I've tried this with return vec3(0,0,0) too
    }
}

问题代码:

faceNormalsNVec满的三角形法线,tri1glm::vec3[3]i1i6是索引。我按顺序运行这些案例以获得我的结果。

// Case 1
tri1[0] = faceNormals[i1]
     + faceNormals[i2]
     + faceNormals[i3]
     + faceNormals[i4]
     + faceNormals[i5]
     + faceNormals[i6]; //gives garbage results

// Case 2
tri1[0] =  faceNormals[i1];
tri1[0] += faceNormals[i2];
tri1[0] += faceNormals[i3];
tri1[0] += faceNormals[i4];
tri1[0] += faceNormals[i5];
tri1[0] += faceNormals[i6]; //tri1[0] contains correct values

// Case 3
glm::vec3 v1 = glm::vec3(faceNormals[i1]);
glm::vec3 v2 = glm::vec3(faceNormals[i2]);
glm::vec3 v3 = glm::vec3(faceNormals[i3]);
glm::vec3 v4 = glm::vec3(faceNormals[i4]);
glm::vec3 v5 = glm::vec3(faceNormals[i5]);
glm::vec3 v6 = glm::vec3(faceNormals[i6]);
glm::vec3 tri = v1+v2+v3+v4+v5+v6; //tri contains correct values!

所以,是的。这对我没有任何意义。当我将vec3添加添加在同一语句中使用我的tri[0]运算符时,我只会收到错误([]中的奇怪数据)。

0 个答案:

没有答案