从OBJ文件中读取点
Read In Points From OBJ File C++
我正在尝试读取以下OBJ文件
#--- ObjWriter ---
v -0.599972 -0.599972 -0.599972
v -0.304591 -0.834531 0.539150
.
.
.
f 1 2 6
f 1 6 5
f 1 5 7
.
.
.
我正试图建立一个函数,该函数将顶点的值(char v之后的3个值)存储到点的向量(Pt由x, y和z组成)和一个面的值(char f之后的3个值)存储到另一个面向量(face由3个整数组成)。到目前为止,我已经尝试了以下函数:
void readFile(char *inFile)
{
ifstream inF(inFile);
string line;
while (getline(inF, line))
{
if (line[0] == 'v')
{
float x, y, z;
inF >> x >> y >> z;
// cout << x;
verts.push_back(Pt(x, y, z));
}
else if (line[0] == 'f')
{
int x, y, z;
inF >> x >> y >> z;
faces.push_back(Face(x, y, z));
}
else if (line[0] == '#')
continue;
}
}
每当我通过在第一个if语句中显示x值来测试此方法时,我都会得到值"-858993460"。如何修复这个函数?cout行的位置被注释掉了。
您可以使用assimp (http://www.assimp.org)代替编写您自己的obj文件读取器
关于代码:在访问索引0处的字符串之前,应该检查line是否为空。然后,在读取浮点值时,必须首先从行中跳过char(在顶点的情况下为"v")。例如,你可以把它读入一个虚拟字符变量。最后,>>改变输入流的状态。例如,您可以使用stringstream并将其初始化为当前行,然后从该流中读取。
像这样:
if(line.empty())
continue;
if (line[0] == 'v')
{
float x, y, z;
char dummy;
std::stringstream ss(line);
ss >> dummy >> x >> y >> z;
cout << x << ";" << y << ";" << z << "n";
}
相关文章:
- 使用新行和不使用新行读取文件
- 读取文件并输入到矢量中
- 读取文件的最后一行并输入到链接列表时出错
- 为什么在读取文件大小时文件IO速度会发生变化
- 读取文件时运行时的未知行为
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C++ 读取文件读取文件不正确
- 读取文件并将其存储在unordered_map中时出现问题
- 读取文件时无法使用 OpenMP 获得加速
- 使用istringstearm和get行缓慢读取文件
- 如何继续读取不同功能中的文件,而不是从头开始再次读取文件?
- 读取文件时引发异常
- 从标准输入读取文件后读取用户输入
- 在读取文件后重置句柄
- 如何在C++编译时读取文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 读取文件在第二次调用时返回INVALID_HANDLE
- 通过指针读取文件
- 逐行读取文件,并将数据插入变量和数组中