干扰矢量在GlBegin()中

Interfering Vector in glBegin()

本文关键字:GlBegin 干扰      更新时间:2023-10-16

我正在尝试实现分配代码以渲染骨架和网状动画。在我的glbegin(gl_triangles)部分中,我有一些向量,这些向量似乎在不应该时会干扰我的信息。

glBegin(GL_TRIANGLES);
    for (int i = 0; i < mesh->nfaces.size(); i += 1)
      for (int k = 0; k < 3; k += 1) {
          int j = k;//2 - k;
          glm::vec4 myPointPrime;
          myPointPrime.w = 1;

          myPoint.x = ecks = mesh->vertex[mesh->faces[i][j]][0];
          myPoint.y = why = mesh->vertex[mesh->faces[i][j]][1];
          myPoint.z = zed = mesh->vertex[mesh->faces[i][j]][2];

            // Stuff vvvv THIS CAUSES PROBLEMS
          for (int t = 0; t < mySkeleton->vertex.at(i).size(); t++) {
              myPointPrime += mySkeleton->vertex[i][j] * MyXformations * myPoint;
          }
          glNormal3f(mesh->normal[mesh->nfaces[i][j]][0],
                    mesh->normal[mesh->nfaces[i][j]][1],
                    mesh->normal[mesh->nfaces[i][j]][2]);

          glVertex3f(mesh->vertex[mesh->faces[i][j]][0],
                    mesh->vertex[mesh->faces[i][j]][1],
                    mesh->vertex[mesh->faces[i][j]][2]);
         // glVertex3f(myPointPrime.x, myPointPrime.y, myPointPrime.z);
         // glVertex3f(myPoint.x, myPoint.y, myPoint.z);
    }
glEnd();

mypointprime = ...代码对我的顶点调用做一些奇怪的事情,除非我对循环进行评论,否则场景不会呈现。

如果我评论循环,则场景呈现,但是我认为如果对16,000个顶点类似动画,我有点需要循环。

有一种有点像将其自动乘以Glvertex调用吗?

编辑:

下面是我希望应该更清楚的代码的另一个版本,而不是计算实际的绘图代码中的点,我更改整个网格以遵循每个帧遵循骨架,但没有任何渲染。

for (int vertex_i = 0; vertex_i < mesh->nfaces.size(); vertex_i++) {
    for (int k = 0; k < 3; k += 1) {
        int j = k;//2 - k;
        pointp.x = 0;
        pointp.y = 0;
        pointp.z = 0;
        for (int t = 0; t < mySkeleton->vertex.at(vertex_i).size(); t++) {
            point.x = mesh->vertex[mesh->faces[vertex_i][j]][0];
            point.y = mesh->vertex[mesh->faces[vertex_i][j]][1];
            point.z = mesh->vertex[mesh->faces[vertex_i][j]][2];
            //glPushMatrix();
            pointp += mySkeleton->vertex[vertex_i][t] * myTranslationMatrix * myRotationMatrix * point;
            cout << "PointP X: " << pointp.x << " PointP Y: " << pointp.y << " PointP Z: " << pointp.z << endl;
            mesh->vertex[mesh->faces[vertex_i][j]][0] = pointp.x;
            mesh->vertex[mesh->faces[vertex_i][j]][1] = pointp.y;
            mesh->vertex[mesh->faces[vertex_i][j]][2] = pointp.z;
            //myPointPrime += MyXformations * myPoint;
        }
    }
}

我的假设是,Pointp的计算可能不做我认为它做的事情?

myskeleton-> vertex [vertex_i] [t]是我的"骨架"类的向量,它容纳每个顶点的所有权重,每个顶点有17个权重。

" myxformations"是一个从我的骨架动画函数传递的4x4矩阵,它具有最后已知的关键框架,并将其应用于顶点。

点是顶点中的当前点。

您的循环变量为 t。但是,您在循环中指的是j。在我看来,您的循环可能只是崩溃的j值。

您在for循环中不使用t。这是预期的吗?

mySkeleton->vertex[i][j]看起来不超出界限,因为j应该适用于mesh->faces/mesh->nfaces

您也可以将glNormal3fvglVertex3fv与数组一起使用。

在界限内内存操作中,您可以看到各种怪异的事情发生,尽管我看不到任何界限。您的*操作员不修改对象吗?

如果您担心性能。您不应该使用立即模式。取而代之的是,将所有数据放在GPU上使用缓冲对象(包括联接/骨转换),并在顶点着色器中飞出动画。

这是几年前的,但值得一读:动画人群渲染。