0

何らかの理由で、メッシュ ファイルがロードされません。何か間違ったことを入力したためなのか、それともファイルが正しいフォルダにないだけなのかはわかりません。現在、.exeと同じフォルダーにあり、「ソースファイル」の下にもあります(間違っている可能性があります)。

メッシュ.cpp

#include "MeshTable.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>

void MeshTable::ReadMesh_M(const char *filename) {
    points.clear();
    faces.clear();

    //the Vertex id in .m file begins from 1,
    //we insert an empty point to align the index
    points.push_back(Point());

    std::ifstream input("C:\\Users\\Zach\\Documents\\Visual Studio 2010\\Projects\\MAIN\\Release\\dog.m");
    while(input.good()) {
        std::string line;
        getline(input, line);

        if (line.empty()) {     
        continue;       
    }

    std::stringstream ss(line);
    std::string title;
    int id;
    ss >> title;

    if (title == "Vertex") {
        Point pt;
        ss >> id >> pt[0] >> pt[1] >> pt[2];
        points.push_back(pt);
    } 
    else if (title == "Face") {
        Face face;
        ss >> id >> face.pt_ids[0] >> face.pt_ids[1] >> face.pt_ids[2];
        faces.push_back(face);
    }

}
input.close();
}

void MeshTable::SaveMesh_M(const char *filename) {
std:: ofstream output(C:\\Users\\Zach\\Documents\\Visual Studio 2010\\Projects\\MAIN\\Release\\dog_out.m);
for (unsigned int i = 1; i < points.size(); ++i) {
    const Point& pt = points[i];
    output << "Vertex " << i << " " << pt[0] << " " << pt[1] << " " << pt[2] << "\n";
}

for (unsigned int i = 0; i < faces.size(); ++i) {
    const Face& face = faces[i];
    output << "Face " << i + 1 << " " << face.pt_ids[0] << " " << face.pt_ids[1] << " " << face.pt_ids[2] << "\n";
}
output.close();
}

正常にビルドされますが、デバッグしようとすると、OpenGL ウィンドウが 3 秒間開いてから閉じ、「プログラム '[3188] Main.exe: Native' はコード -1 (0xffffffff) で終了しました」と表示されます。これは私のmain.cppから来ています。

if (argc != 2) {
    std::cout << "Load a .m file as a mesh table.\n";
    std::cout << "Usage: " << argv[0] << " input_mesh.m\n";
    exit(-1);
}

EDITこれを削除すると、うまくいきました。私の先生は私にコードのこの(一部)をくれたので、なぜそれがうまくいかないのか本当にわかりません。

if (argc != 2) {
    std::cout << "Load a .m file as a mesh table.\n";
    std::cout << "Usage: " << argv[0] << " input_mesh.m\n";
    exit(-1);
}
4

1 に答える 1

1
if (argc != 2) {
    std::cout << "Load a .m file as a mesh table.\n";
    std::cout << "Usage: " << argv[0] << " input_mesh.m\n";
    exit(-1);
}

プログラムを実行するときに、メッシュ ファイルの名前をコマンド ライン パラメータに渡す必要があります。つまり、「program.exe meshfile.m」として起動する必要があります。

VS 2008 では、デバッグ パラメータ/コマンド ライン引数は、プロジェクト プロパティ -> 構成プロパティ -> デバッグ -> コマンド引数で指定できました。VS2010 では、それらは同様の場所にある可能性があります。

また、プログラムを実行するときは「出力」と読みます。先生から提供されたコード フラグメントは、実際にプログラムの使用法を出力します。

于 2012-05-02T16:18:33.007 に答える