图形学编程学习日志01
来源:互联网 发布:网络免费卫星电视直播 编辑:程序博客网 时间:2024/06/03 15:29
1.obj文件的读取
#include<sstream>#include <string> #include <stdio.h>#include <stdlib.h>#include <math.h>#include <GL/glut.h>#include <iostream>#include <fstream>#include <GL/GLAUX.H>#pragma comment(lib, "glew32.lib")#pragma comment(lib,"glaux.lib ") using namespace std; float eye[3] = {0,0,0};float degreex=0;float degreey=0;float degreez=0;string s1;GLfloat f2,f3,f4;int v_num=0; //记录点的数量int vn_num=0;//记录法线的数量int f_num=0; //记录面的数量GLfloat **vArr; //存放点的二维数组GLfloat **vnArr;//存放法线的二维数组int **fvArr; //存放面顶点的二维数组int **fnArr; //存放面法线的二维数组//int v_num=382; //int vn_num=382; //int f_num=760; //GLfloat vArr[382][3]; //GLfloat vnArr[382][3];////int fvArr[760][3]; //int fnArr[760][3]; int counta(string addr)//计数函数 { ifstream filea(addr.c_str());cout << "读取文件"<<endl;if (!filea){cout << "读取文件失败";return -1;}string strline; while(getline(filea,strline)) {if(strline[0]=='v'){if(strline[1]=='n')//vn得到法线的数目 {vn_num++; } if(strline[1]==' ')//v得到顶点的数目 {v_num++; }}if (strline[0]=='f') //得到面的数目{f_num++;}} //cout<<v_num<<endl<<vn_num<<endl<<f_num<<endl;int i=0;vArr=new GLfloat*[v_num];//开辟存放顶点的空间for (int i=0;i<v_num;i++){ vArr[i]=new GLfloat[3];}vnArr=new GLfloat*[vn_num];//开辟存放法线的空间for (i=0;i<vn_num;i++){ vnArr[i]=new GLfloat[3];}fvArr=new int*[f_num];//面fnArr=new int*[f_num];for (i=0;i<f_num;i++){ fvArr[i]=new int[3]; fnArr[i]=new int[3];} return 0; }int reada(string addr) //读取文件内容并存储各个数组{ifstream filea(addr.c_str());cout << "load……"<<endl;if (!filea){cout << "读取文件失败";return -1;}string strline; int ii=0,jj=0,kk=0; while(getline(filea,strline)){if(strline[0]=='v'){ if(strline[1]=='n')//vn {istringstream strin(strline);strin>>s1>>f2>>f3>>f4;vnArr[ii][0]=f2;vnArr[ii][1]=f3;vnArr[ii][2]=f4;ii++; } if(strline[1]==' ')//v {istringstream strin(strline);strin>>s1>>f2>>f3>>f4;vArr[jj][0]=f2;vArr[jj][1]=f3;vArr[jj][2]=f4;jj++;//cout<<"good"; }}if (strline[0]=='f') //读取面{ istringstream in(strline); GLfloat a; in>>s1;//去掉前缀f int i,k; for(i=0;i<3;i++) {in>>s1; // cout<<s1<<endl;//取得顶点索引和法线索引a=0; for(k=0;s1[k]!='/';k++) {//cout<<s1[k]<<endl; a=a*10+(s1[k]-48); // cout<<a<<endl;}fvArr[kk][i]=a;k++; for(;s1[k]!='/';k++) {; }a=0;for(k=k+1;s1[k];k++){ a=a*10+(s1[k]-48);}fnArr[kk][i]=a;} kk++; }}filea.close();return 0;}到这里就已经把整个文件读取成功了,下一步应该是要用opengl把整个模型文件描绘出来。
- 图形学编程学习日志01
- ado 编程 学习日志
- dll编程学习日志
- dll编程学习日志
- 网络编程学习日志
- 编程语言学习日志
- Java编程学习日志 IO
- Java编程学习日志 异常
- Java编程学习日志 文件
- 计算机图形学的学习
- 计算机图形学的学习
- 计算机图形学的学习
- 如何学习计算机图形学
- 实时图形学学习笔记
- 如何学习计算机图形学
- 计算机图形学---学习笔记
- 计算机图形学的学习
- 计算机图形学学习
- Beautiful Soup安装
- ubuntu记事本乱码
- unity3d 凹凸贴图、法线贴图、置换贴图 (一)
- sed简单使用
- 数据结构之(图最短路径之)Floyd(弗洛伊德)算法
- 图形学编程学习日志01
- 焦距、物距与像距
- ubuntu 安装 jdk7 + eclipse (我初学时候的方法,现在我不建议这么安装)
- 5.2指针与函数变元
- Opticks插件创建--运行插件
- uva10167 简单的生成测试法
- unity3d 凹凸贴图、法线贴图、置换贴图 (二)
- jdk,jre你真的懂吗?
- 哪本书是对程序员最有影响、每个程序员都该阅读的书?