我正在計算每張臉部的法線。在C++中計算正常的臉部
void myFace::computeNormal()
{
myHalfedge* e1 = adjacent_halfedge;
myHalfedge* e2 = e1->prev;
myVertex* v1 = e1->source;
myVertex* v2 = e2->source;
myVertex* v3 = (e1->next)->source;
myPoint3D* p1 = v1->point;
myPoint3D* p2 = v2->point;
myPoint3D* p3 = v3->point;
myVector3D vect1 = *p3-*p1;
myVector3D vect2 = *p2-*p1;
normal = &vect1.crossproduct(vect2);
}
void myMesh::computeNormals()
{
myFace* f = NULL;
for (int i = 0; i < faces.size(); i++)
{
f = faces[i];
f->computeNormal();
}
}
但是,當調用f->computeNormal();
時,所有先前的值將被上一次計算的值替換。任何人都可以給我一個建議,什麼應該是錯的?
EDIT(由交叉積)
void myVector3D::crossproduct(myVector3D & v1, myVector3D & v2)
{
dX = v1.dY * v2.dZ - v1.dZ * v2.dY;
dY = v1.dZ * v2.dX - v1.dX * v2.dZ;
dZ = v1.dX * v2.dY - v1.dY * v2.dX;
}
myVector3D myVector3D::crossproduct(myVector3D & v1)
{
myVector3D result;
result.crossproduct(*this, v1);
return result;
}
crossproduct()是如何定義的?和會員正常?電話看起來很可疑。 – laune
正常定義爲'myVector3D *正常;' – kmaci
'normal =&vect1.crossproduct(vect2);'獲取臨時地址* - 返回的myVector3D必須按值保存。當堆棧彈出時,「普通」指針無效,下一次調用'crossproduct'會在堆棧中的相同位置創建下一個產品,因此可以看到舊的無效指針。 –