




免费预览已结束,剩余21页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #include #include #include #include #include #includeusing namespace std;int v_num = 0; /记录点的数量int f_num = 0; /记录面的数量int vn_num = 0;/记录法向量的数量int vt_num = 0;GLfloat *vArr; /存放点的二维数组int *fvArr; /存放面顶点的二维数组int *fnArr;/存放面法向量的二维数组int *ftArr;GLfloat *vtArr;GLfloat *vnArr;/存放法向量的二维数组string s1, s2, s3, s4;GLfloat f2, f3, f4;void getLineNum(string addrstr) /获取点和面的数量ifstream infile(addrstr.c_str(); /打开指定文件string sline;/每一行int i = 0, j = 0;while (getline(infile, sline) /从指定文件逐行读取if (sline0 = v)if (sline1 = n)vn_num+;else if(sline1 = t)vt_num+;elsev_num+;if (sline0 = f)f_num+;int readfile(string addrstr) /将文件内容读到数组中去/getLineNum(addrstr);/new二维数组vArr = new GLfloat*v_num;for (int i = 0; iv_num; i+)vArri = new GLfloat3;vnArr = new GLfloat*vn_num;for (int i = 0; ivn_num; i+)vnArri = new GLfloat3;vtArr = new GLfloat*vt_num;for (int i = 0; ivt_num; i+)vtArri = new GLfloat2;fvArr = new int*f_num;fnArr = new int*f_num;ftArr = new int*f_num;for (int i = 0; i s1 f2 f3 f4;vnArrii0 = f2;vnArrii1 = f3;vnArrii2 = f4;ii+;else if (sline1 = t)istringstream sin(sline);sin s1 f2 f3 ;cout f2 s1 f2 f3 f4;vArrjj0 = f2;vArrjj1 = f3;vArrjj2 = f4;jj+;if (sline0 = f) /存储面istringstream in(sline);GLfloat a;in s1;/去掉fint i, k;for (i = 0; i s1;cout s1 endl;/取出第一个顶点和法线索引a = 0;/int len = sizeof(s1);int len = s1.length();cout len;for (int m = 0; m len; m+)if (s1m != /)a = a * 10 + (s1m - 48);fvArrkki = a;elsem+;if (m =3)if (s1m != /)a = a * 10 + (s1m - 48);ftArrkki = a;elsem+;a = a * 10 + (s1m - 48);fnArrkki = a;else/m+;a = a * 10 + (s1m - 48);fnArrkki = a;/for (k = 0; s1k != /; k+)/a = a * 10 + (s1k - 48);/fvArrkki = a;/a = 0;/for (k = k + 2; s1k; k+)/a = a * 10 + (s1k - 48);/fnArrkki = a;kk+;return 0;void init(void)getLineNum(Eight.obj);readfile(Eight.obj);GLfloat mat_specular = 1.0, 1.0, 1.0, 1.0 ;GLfloat mat_shininess = 50.0 ;/材料的镜面指数,其值越大越精细GLfloat light_position = 1.0, 1.0f, 1.0, 0.0 ;GLfloat white_light = 1.0, 1.0, 1.0, 1.0 ;GLfloat lmodel_ambient = 0.1, 0.1, 0.1, 1.0 ;glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_SMOOTH);glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);glLightfv(GL_LIGHT0, GL_POSITION, light_position);/光源位置glLightfv(GL_LIGHT0, GL_DIFFUSE, white_light);/漫反射光源glLightfv(GL_LIGHT0, GL_SPECULAR, white_light);/镜面反射光源glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);/环境光源glEnable(GL_LIGHTING);/启动光照glEnable(GL_LIGHT0);/启用0度光源glEnable(GL_DEPTH_TEST);/启动深度测试/*glShadeModel(GL_SMOOTH);/ Enable Smooth ShadingglClearColor(0.0f, 0.0f, 0.0f, 0.5f);/ 黑色背景glClearDepth(1.0f);/ 深度缓冲区设置glEnable(GL_DEPTH_TEST);/ 允许深度测试glDepthFunc(GL_LEQUAL);/ 定义深度测试类型glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);/ Really Nice Perspective Calculation*/void display(void)glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/gluLookAt(-2.0, -2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); /设置观察的位置glTranslatef(1.0, -0.0, -8.0);glScalef(0.1, 0.1, 0.1);for (int i = 0; if_num; i+)glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glBegin(GL_TRIANGLES);if (vn_num = 0)/glNormal3f(vnArrfnArri0 - 10, vnArrfnArri0 - 11, vnArrfnArri0 - 12);glVertex3f(vArrfvArri0 - 10, vArrfvArri0 - 11, vArrfvArri0 - 12);/glNormal3f(vnArrfnArri1 - 10, vnArrfnArri1 - 11, vnArrfnArri1 - 12);glVertex3f(vArrfvArri1 - 10, vArrfvArri1 - 11, vArrfvArri1 - 12);/glNormal3f(vnArrfnArri2 - 10, vnArrfnArri2 - 11, vnArrfnArri2 - 12);glVertex3f(vArrfvArri2 - 10, vArrfvArri2 - 11, vArrfvArri2 - 12);elseglTexCoord2f(vtArrftArri0 - 10, vtArrftArri0 - 11);/glNormal3f(vnArrfnArri0 - 10, vnArrfnArri0 - 11, vnArrfnArri0 - 12);glVertex3f(vArrfvArri0 - 10, vArrfvArri0 - 11, vArrfvArri0 - 12);glTexCoord2f(vtArrftArri1 - 10, vtArrftArri1 - 11);/glNormal3f(vnArrfnArri1 - 10, vnArrfnArri1 - 11, vnArrfnArri1 - 12);glVertex3f(vArrfvArri1 - 10, vArrfvArri1 - 11, vArrfvArri1 - 12);glTexCoord2f(vtArrftArri2 - 10, vtArrftArri2 - 11);/glNormal3f(vnArrfnArri2 - 10, vnArrfnArri2 - 11, vnArrfnArri2 - 12);glVertex3f(vArrfvArri2 - 10, vArrfvArri2 - 11, vArrfvArri2 - 12);glEnd();glFlush();/强制绘图void reshape(int w, int h)glViewport(0, 0, (GLsizei)w, (GLsizei)h); /视口设置glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w = h)/描绘了两种不同情况下的平行修剪空间glOrtho(-1.5, 1.5, -1.5 * (GLfloat)h / (GLfloat)w, 1.5 * (GLfloat)h / (GLfloat)w, -10.0, 10.0);elseglOrtho(-1.5*(GLfloat)w / (GLfloat)h, 1.5*(GLfloat)w / (GLfloat)h, -1.5, 1.5, -10.0, 10.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();int main(int argc, char *argv)glutInit(&argc, argv);/对GLUT进行初始化glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);/设置显示方式,单缓冲、RGB颜色glutInitWindowSize(500, 500);glutInitWindowPosition(100, 100); /glutCreateWindow(argv0);glutCreateWindow(Test);init();glutDisplayFunc(display);glutReshapeFunc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年仓储物流RFID行业当前发展现状及增长策略研究报告
- 2025年超短波电台行业当前市场规模及未来五到十年发展趋势报告
- 2025年廊坊市文安县中考四模数学试题含解析
- 法律实务民事诉讼试题库(附答案)
- 2025年公共卫生知识培训试题及答案
- 2024年运动员(体育与健康)技能及理论知识考试题与答案
- 2024年大学生创业者“创业能力及风险意识”等知识考试题库与答案
- 陕西省渭南市韩城市2024-2025学年七年级下学期期末语文试题(解析版)
- 信息技术笔试题及答案
- 2025关于房屋租赁合同范本及注意事项
- 银行行业保密知识培训
- 超声引导下神经阻滞
- 北京2MW分布式光伏各个季节典型日出力曲线及数据
- 通用电子嘉宾礼薄
- 机器学习模型训练
- 锅炉烟风煤及排放计算书(带公式)
- 2019县级国土资源调查生产成本定额
- 连续油管技术理论考核试题
- 瓦斯管道与避雷塔基础安全距离
- 工业机器人机械结构的认知-课件
- 双向转诊流程图
评论
0/150
提交评论