[英]Reading .obj mesh file in Visual C++
我正在开发一个程序,该程序需要一个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文件(以及最终打印该文件的内容?)
您在此处没有提供足够的信息,但是很明显问题很可能是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");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.