Чтение obj файлов! (Индексы) - PullRequest
0 голосов
/ 17 июня 2020

Я хочу прочитать лица (f), но на них есть «/», которые я не знаю, как удалить? По сути, я хочу получить число лиц, хранящееся во временной переменной. Понятия не имею, как это сделать в c ++ fstream.

std::string text;
    std::istringstream iss(line);

    iss >> text;

    // Easy part!
    if (text == "v")
    {
        glm::vec3 currectPos;

        iss >> currectPos.x;
        iss >> currectPos.y;
        iss >> currectPos.z;

        filePos.push_back(currectPos);
    }
    if (text == "vt")
    {
        glm::vec2 currectUV;

        iss >> currectUV.x;
        iss >> currectUV.y;

        fileUV.push_back(currectUV);
    }
    if (text == "vn")
    {
        glm::vec3 currectNorm;

        iss >> currectNorm.x;
        iss >> currectNorm.y;
        iss >> currectNorm.z;

        fileNorm.push_back(currectNorm);
    }


    // Last part, hard part!
    if (text == "f")
    {
        // Face!!! :O
        // This one here I am having trouble with
        // How do I read it?
    }

v -1.000000 -1.000000 1.000000
v -1.000000 1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v -1.000000 1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v 1.000000 1.000000 1.000000
v 1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
vt 0.625000 0.000000
vt 0.375000 0.250000
vt 0.375000 0.000000
vt 0.625000 0.250000
vt 0.375000 0.500000
vt 0.625000 0.500000
vt 0.375000 0.750000
vt 0.625000 0.750000
vt 0.375000 1.000000
vt 0.125000 0.750000
vt 0.125000 0.500000
vt 0.875000 0.500000
vt 0.625000 1.000000
vt 0.875000 0.750000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
f 2/1/1 3/2/1 1/3/1
f 4/4/2 7/5/2 3/2/2
f 8/6/3 5/7/3 7/5/3
f 6/8/4 1/9/4 5/7/4
f 7/5/5 1/10/5 3/11/5
f 4/12/6 6/8/6 8/6/6
f 2/1/1 4/4/1 3/2/1
f 4/4/2 8/6/2 7/5/2
f 8/6/3 6/8/3 5/7/3
f 6/8/4 2/13/4 1/9/4
f 7/5/5 5/7/5 1/10/5
f 4/12/6 2/14/6 6/8/6

1 Ответ

0 голосов
/ 18 июня 2020
int i, j, k;
char c;
iss >> i;
iss >> c; // remove the /
iss >> j;
iss >> c; // remove the next /
iss >> k;

сохраните где-нибудь i, j, k и так далее, затем повторите столько раз, сколько необходимо.

...