C++ 3D转换错误,内存错误。
我知道这是很多代码,对此我深表歉意,但我相信这是所有必要的代码,以了解我在做什么,并注意到问题将在哪里C++ 3D转换错误,内存错误。,c++,debugging,c++11,3d,transformation,C++,Debugging,C++11,3d,Transformation,我知道这是很多代码,对此我深表歉意,但我相信这是所有必要的代码,以了解我在做什么,并注意到问题将在哪里 void ShapeContainer::draw(GraphicsContext* gcontext, viewContext* vContext) { for (auto sDraw : image) { sDraw->draw(gcontext, vContext); } } M3D是我想要的3D转换的合成矩阵最有可能的是,某个地方有一个
void ShapeContainer::draw(GraphicsContext* gcontext, viewContext* vContext) {
for (auto sDraw : image) {
sDraw->draw(gcontext, vContext);
}
}
M3D是我想要的3D转换的合成矩阵最有可能的是,某个地方有一个指针超出了指向的有效位置范围,并将垃圾写入了重要内容。离题:如果你以我认为你定义的方式违抗了矩阵对象,您可能会发现,通过将2D数组替换为1D数组,您的性能得到了显著提高。主题:您是否使用调试器逐步完成了绘图例程,或者使用valgrind运行了程序?Valgrind经常是发现像这样爆炸的炸弹。@user4581301我实际上不知道如何使用Valgrind,我一定要去看看
void ShapeContainer::draw(GraphicsContext* gcontext, viewContext* vContext) {
for (auto sDraw : image) {
sDraw->draw(gcontext, vContext);
}
}
void triangle::draw(GraphicsContext* gcontext, viewContext* vContext) {
matrix temp(4, 1);
matrix temp2(4, 1);
matrix temp3(4, 1);
temp[0][0] = origin[0][0];
temp[1][0] = origin[1][0];
temp[2][0] = 1;
temp2[0][0] = origin[0][1];
temp2[1][0] = origin[1][1];
temp2[2][0] = 1;
temp3[0][0] = origin[0][2];
temp3[1][0] = origin[1][2];
temp3[2][0] = 1;
temp = vContext->model_to_device_3D(temp);
temp2 = vContext->model_to_device_3D(temp2);
temp3 = vContext->model_to_device_3D(temp3);
//set color to color input from constructor.
gcontext->setColor(color);
//x1,y1,x2,y2
gcontext->drawLine(temp[0][0], temp[1][0], temp2[0][0], temp2[1][0]);
//x2,y2,x3,y3
gcontext->drawLine(temp2[0][0], temp2[1][0], temp3[0][0], temp3[1][0]);
//x3,y3,x1,y1
gcontext->drawLine(temp3[0][0], temp3[1][0], temp[0][0], temp[1][0]);
std::cout << "just drew a triangle" << std::endl;
}
matrix viewContext::model_to_device_3D(const matrix& param) {
matrix hold_values(param); //copy
//TODO [0][2] OR [2][0]
hold_values[0][2] = 1;
hold_values = (M3D * hold_values);
//TODO not sure if matrix divison works
//may have to do 1/hold_values[3][0] then multiply that with hold_values
double temp = 1 / hold_values[3][0];
hold_values = hold_values * temp;
return hold_values;
}