他の問題をMyMesh
コンストラクターにデバッグしました。このコードでは:
if (hollow) {
numTriangles = n*8;
triangles=new MyTriangle[numTriangles];
if (smooth) numSurfacePoints=n*8;
else numSurfacePoints=n*12;
surfacePoints=new SurfacePoint[numSurfacePoints];
}else {
numTriangles = n*4;
triangles=new MyTriangle[numTriangles];
if (smooth){
numSurfacePoints=n*4;
surfacePoints=new SurfacePoint[numSurfacePoints];
surfacePoints[n*4]=SurfacePoint(vector3(0,0,1),vector3(0,0,1));
surfacePoints[n*4+1]=SurfacePoint(vector3(0,0,-1),vector3(0,0,-1));
}else{
numSurfacePoints=n*6;
surfacePoints=new SurfacePoint[numSurfacePoints];
surfacePoints[n*6]=SurfacePoint(vector3(0,0,1),vector3(0,0,1));
surfacePoints[n*6+1]=SurfacePoint(vector3(0,0,-1),vector3(0,0,-1));
}
}
メッシュに必要な SurfacePoints と Triangles を決定しています。ブール値の「中空」と「滑らか」は、コーンに穴が必要かどうか、または法線が同じかどうかを示しますが、それは無関係だと思います。
問題は、hollow==falseの場合、何か問題がありますが、クラッシュはしません。値を配列に入れることもできますが、次のように計算しようとすると:
for(int i=0;i<numSurfacePoints;i++){
std::cout<<"vertex "<<i<<"-> pos:"<<surfacePoints[i].pos.x<<" "<<
surfacePoints[i].pos.y<<" "<<surfacePoints[i].pos.z<<
" norm:"<<surfacePoints[i].norm.x<<" "<<surfacePoints[i].norm.y<<
" "<<surfacePoints[i].norm.z<<"\n";
}
i=0 のときに、bad_alloc 例外をスローします。
さらに、上部のコード セグメントが演算子 new に bad_alloc をスローしたときがありましたが、その問題は自然に解決しましたが、関連している可能性があります。
誰でも私を助けることができますか?