triangle* tri = new triangle((GraphicsContext::RED), x1, y1, z1,
x2, y2, z2, x3, y3, z3);
std::cout << "PASSED triangle instantiation" << std::endl
<< std::endl;
add(tri);
std::cout << "PASSED add" << std::endl << std::endl;
tri->draw(gc, vc);
//delete (&tri);
std::cout << "PASSED draw method" << std::endl << std::endl;
因此,在查看此内容时,它位于open_file方法中。我打开一个文件,读取3行,每行包含3个双打。一个x,y和z。 所以我需要所有9个三角形来形成(3D转换) 它通过了除第一次绘制之外的所有方法。一旦它进入平局,我得到 “ *`./lines'错误:malloc():内存损坏(快速):0x088d7c50 * 流产“ 这是我以前从未见过的。有人可以请帮助。
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;
}
这是设备3D方法的模型。
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;
}
M3D是我想要的复合矩阵用于3D转换