使用OpenGL和C ++进行布料模拟

时间:2016-03-20 05:34:26

标签: c++ opengl

我正在尝试在此链接中运行此C ++代码: https://searchcode.com/codesearch/raw/108480099/ 我在这部分遇到错误:

void drawTriangle(Particle *p1, Particle *p2, Particle *p3, const Vec3 color)
{
glColor3fv( (GLfloat*) &color );
glNormal3fv((GLfloat *) &(p1->getNormal().normalized() ));  //line 249
glVertex3fv((GLfloat *) &(p1->getPos() ));

glNormal3fv((GLfloat *) &(p2->getNormal().normalized() ));   //line 252
glVertex3fv((GLfloat *) &(p2->getPos() ));

glNormal3fv((GLfloat *) &(p3->getNormal().normalized() ));  //line 255
glVertex3fv((GLfloat *) &(p3->getPos() ));
}

错误:

249:58: error: taking address of temporary [-fpermissive]
        glNormal3fv((GLfloat *) &(p1->getNormal().normalized() ));
252:58: error: taking address of temporary [-fpermissive]
        glNormal3fv((GLfloat *) &(p2->getNormal().normalized() ));
255:58: error: taking address of temporary [-fpermissive] 
        glNormal3fv((GLfloat *) &(p3->getNormal().normalized() ));

实际问了这个问题here

  

如果将其存储在变量中   auto instance = p1->getNormal().normalized();   您可以使用instance的地址。

对不起,我不明白答案。如何申请?

我是C ++的新手,希望能够运行模拟。 如果我以错误的方式提问,我道歉。

1 个答案:

答案 0 :(得分:0)

错误说明了一切:

  

错误:获取临时

的地址

您不应该获取函数返回的临时对象的地址。

  GLfloat localObj = p1->getNormal().normalized();
  glNormal3fv((GLfloat *) &(localObj));  //line 249

解决方案是在函数中定义一个新对象,并为其分配/复制临时对象。新对象是本地对象,并且在函数范围内保持有效。 这将正常工作,因为函数glNormal3fv不期望传递的数组应该永远存在。