正在Visual C++中读取.obj网格文件



我正在开发一个程序,该程序接收Wavefront.obj文件,并最终将其放入OpenGL中并显示对象。

现在我只是想读取一个简单的cube.obj文件并打印其中的内容。其内容为:

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

我将cube.obj放在命令行args中,并检查它是否打开。

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

它甚至还没有打开。有没有更好的方法打开.obj文件(以及最终打印其中的内容?)

您在这里没有提供足够的信息,但很明显,问题很可能是argv[1]的内容。argv[1]的指针指向什么?不要想当然,使用调试器并查看它。我敢打赌它不是你想的那样。

您也没有考虑这样一个事实,即您的程序可能没有用任何参数启动,这意味着argv[1]正在读取缓冲区的末尾。不过这是切向的。

编辑:

根据您的评论,您需要提供文件到fopen的完整路径。如果文件在您的运行目录中,它应该可以工作,但取决于您的环境(VS是其中之一),这可能不像听起来那么简单。

我在\project\debug目录中使用文件foo.txt运行了一个测试,该目录与我的可执行文件相同。它无法打开具有相对路径的文件,但成功地打开了完整路径。

然而,如果我只是双击该目录中的可执行文件,它就工作了。显然,VS正在幕后做一些事情,改变工作目录。

要使用相对路径,请右键单击项目->属性->调试->工作目录。把它设置到你的输出文件夹中,你就可以了。

#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
int main() {
    FILE *file;
    if(!(file = fopen("foo.txt", "r"))) {
        printf("no worky");
    }
}

最新更新