3D转换错误,内存错误。

时间:2016-02-18 04:58:23

标签: c++ debugging c++11 3d transformation

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转换

0 个答案:

没有答案