Чтение .obj файла сетки в Visual C ++ - PullRequest
0 голосов
/ 20 марта 2012

Я работаю над программой, которая принимает файл Wavefront .obj и в конечном итоге помещает его в OpenGL и отображает объект.

Сейчас я просто пытаюсь прочитать простой файл cube.obj и распечатать его содержимое. Его содержание:

v -1.0 -1.0 -2.0 
v 1.0 -1.0 -2.0 
v 1.0 1.0 -2.0 
v -1.0 1.0 -2.0 
v -1.0 -1.0 -4.0 
v 1.0 -1.0 -4.0 
v 1.0 1.0 -4.0 
v -1.0 1.0 -4.0 
f 1 2 3 
f 3 4 1 
f 6 5 7 
f 5 8 7 
f 2 6 3 
f 7 3 6 
f 1 4 5 
f 4 8 5 
f 4 7 8 
f 4 3 7 
f 5 6 1 
f 6 2 1

Я поместил cube.obj в аргументы командной строки и проверил, открылся ли он.

FILE *fp;
fp = fopen(argv[1], "r");
if(fp == NULL)
    fprintf(stderr, "cat: can't open %s\n", argv[1]);
else
    printf("works");

cin.get();

Это даже не открытие. Есть ли лучший способ открыть файл .obj (а также распечатать его содержимое?)

1 Ответ

0 голосов
/ 20 марта 2012

Вы не предоставили достаточно информации здесь, но кажется очевидным, что проблема, скорее всего, в содержимом argv[1].На что указывает указатель в argv[1]?Не думайте, используйте ваш отладчик и посмотрите на него.Бьюсь об заклад, это не то, что вы думаете.

Вы также не учитываете тот факт, что ваша программа, возможно, не была запущена с какими-либо аргументами, а это означает, что argv[1] читает после конца буфера.Это тангенциально.

РЕДАКТИРОВАТЬ:

Для вашего комментария, вы должны указать полный путь к файлу fopen.Он должен работать, если файл находится в вашем рабочем каталоге, но в зависимости от вашего environemnt (VS один), который может быть не так просто, как кажется.

Я провел тест с файлом foo.txt в моем\ project \ debug каталог, тот же каталог, что и мой исполняемый файл.Не удалось открыть файл с относительным путем, но удалось указать полный путь.

Однако, если я просто дважды щелкнул исполняемый файл в этом каталоге, он работал.Очевидно, VS делает что-то за кулисами, что меняет рабочий каталог.

Чтобы использовать относительные пути, щелкните правой кнопкой мыши проект -> Свойства -> Отладка -> Рабочий каталог.Установите это в свою выходную папку, и все будет в порядке.

#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>

int main() {
    FILE *file;
    if(!(file = fopen("foo.txt", "r"))) {
        printf("no worky");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...