您的位置:首页 > 编程语言 > C语言/C++

C++读取OBJ文件 对于f数据 取出任意自己想要的数据

2015-05-13 13:25 316 查看
C++读取OBJ文件 对于f数据 取出任意自己想要的数据

自己建了一个1.txt

文件内容如下

f 77959/79546/77959 37781/38039/37783 37770/38028/37772

f 77959/79546/77959 58979/59636/58979 37781/38039/37783

f 77960/79547/77960 66852/67777/66852 2586/2621/2588

f 8189/8230/8191 9490/9533/9492 21242/21342/21244

f 62968/63763/62968 71857/73031/71857 62957/63752/62957

取出每个数据存放起来

代码如下:

#include<stdio.h>
#include<iostream>
#include<string>
#include<fstream>
#include<sstream>

using namespace std;

int main()
{
	FILE *fp;
	char ext[1000];
	string tempStr, lineStr;
	bool end_of_file = false;
	double  a, b, c;
	int vnum=0;
	int fnum=0;
	//char m[30],n[30],q[30];
	int m,n,q,m1,n1,q1,m2,n2,q2;

	//if ((fp = _wfopen(L"C:\\Users\\DELL\\Desktop\\M1-91(YINHU)-jm17w-zhk.obj", L"r")) == NULL)
	//	return false;

	if ((fp = _wfopen(L"C:\\Users\\DELL\\Desktop\\1.txt", L"r")) == NULL)
		return false;

	//------------统计总数 定点和面片——————————————
    //for(int jj=0;jj<20000000;jj++)
	while(!feof(fp))
	{
	fscanf(fp, "%s", ext);//读取文件第一行的“OFF”

	//cout<<ext<<"\n";
	if(ext[0]=='v'&&ext[1]=='\0')
	{
		vnum++;
	}
    int i=0,j=0,k=0;
	if(ext[0]=='f'&&ext[1]=='\0')
	{
		fnum++;
	}
	//if (strcmp(ext, "OFF") != 0 && strcmp(ext, "off") != 0)//判断文件格式是否是“OFF”
	//	return false;
	//读取文件第二行的顶点数和面数
	//fscanf(fp, "%d%d%d\n", &a, &b, &c);
	//创建顶点和面数组

	//}
	}
	cout<<"vnum="<<vnum<<" "<<"fnum="<<fnum<<"\n";

	fseek(fp,0,SEEK_SET);
	//———————————————读取顶底和面片信息————————————

	/*
    //for(int jj=0;jj<20000000;jj++)
	while(!feof(fp))
	{
	fscanf(fp, "%s", ext);//读取文件第一行的“OFF”

	//cout<<ext<<"\n";
	if(ext[0]=='v'&&ext[1]=='\0')
	{
		fscanf(fp, "%lf%lf%lf\n", &a, &b, &c);
	    cout << a <<" "<< b<<" " << c<<" " << "\n";
	}
    int i=0,j=0,k=0;
	if(ext[0]=='f'&&ext[1]=='\0')
	{
		fscanf(fp, "%s%s%s", &m, &n, &q);
	
		   for (int kk = 0; m[kk] != '/'; kk++)  
            {  
                i = i * 10 + (m[kk] - 48);  
            }  
  
            for (int kk = 0; n[kk] != '/'; kk++)  
            {  
                j = j * 10 + (n[kk] - 48);  
            }  
  
            for (int kk = 0; q[kk] != '/'; kk++)  
            {  
                k = k * 10 + (q[kk] - 48);  
            }  
	    cout << i <<" "<< j<<" " << k<<" " << "\n";
	

	}
	//if (strcmp(ext, "OFF") != 0 && strcmp(ext, "off") != 0)//判断文件格式是否是“OFF”
	//	return false;
	//读取文件第二行的顶点数和面数
	//fscanf(fp, "%d%d%d\n", &a, &b, &c);
	//创建顶点和面数组

	//}
	}

	*/

	//————————————读取顶底和面片信息(纹理、法向量)——————

	while(!feof(fp))
	{
	fscanf(fp, "%s", ext);//读取文件第一行的“OFF”
    int i=0,j=0,k=0;
	if(ext[0]=='f'&&ext[1]=='\0')
	{
		fscanf(fp, "%d/%d/%d%d/%d/%d%d/%d/%d", &m, &n, &q,&m1,&n1,&q1,&m2,&n2,&q2);
		cout<<m<<" "<<n<<" "<<q<<" "<<m1<<" "<<n1<<" "<<q1<<" "<<m2<<" "<<n2<<" "<<q2<<"\n";

	}
	}

	fclose(fp);

}
运行结果如下



关键问题就是要熟悉函数

fscanf().
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐