```cpp
在这里插入代码片
// #include <glut.h>
#include <iostream>
#include <math.h>
#include <string>
#include <stdio.h>
#include <sstream>
#include <fstream>
#include <windows.h>
using namespace std;int v_num = 0;  //��¼�������
int f_num = 0;  //��¼�������
int vn_num = 0; //��¼���������
int vt_num = 0; //��¼�������������GLfloat **vArr;  //��ŵ�Ķ�ά����
GLfloat **vnArr; //��ŷ���Ķ�ά����
GLfloat **vtArr; //�����������Ķ�ά����int **fvArr; //����涥��Ķ�ά����
int **fnArr; //����淨��Ķ�ά����
int **ftArr; //�������������Ķ�ά����GLfloat angle_galaxy = 0.0f; //��ϵ��ת���ٶ�
GLfloat galaxy_r = 0.5;
GLfloat galaxy_g = 0.0;
GLfloat galaxy_b = 0.0;
GLfloat emission_galaxy[3];GLfloat blank_Emission[4] = {0.0f, 0.0f, 0.0f, 0.0f};
void destoryObj()
{v_num = 0;  //��¼�������f_num = 0;  //��¼�������vn_num = 0; //��¼���������vt_num = 0; //��¼�������������vArr = NULL;vnArr = NULL;vtArr = NULL;fvArr = NULL;fnArr = NULL;ftArr = NULL;
}void getLineNum(string addrstr) //��ȡ����������
{v_num = 0;                        //��¼�������f_num = 0;                        //��¼�������vn_num = 0;                       //��¼���������vt_num = 0;                       //��¼�������������ifstream infile(addrstr.c_str()); //��ָ���ļ�string sline;                     //ÿһ��while (getline(infile, sline)) //��ָ���ļ����ж�ȡ{if (sline.empty())continue;if (sline[0] == 'v'){if (sline[1] == 'n')vn_num++;if (sline[1] == 't')vt_num++;elsev_num++;}if (sline[0] == 'f'){f_num++;}}infile.close();
}int readfile(string addrstr) //���ļ����ݶ���������ȥ
{//new��ά����int i;vArr = new GLfloat *[v_num]; //��������for (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];}vtArr = new GLfloat *[vt_num]; //��������for (i = 0; i < vt_num; i++){vtArr[i] = new GLfloat[2];}fvArr = new int *[f_num];fnArr = new int *[f_num];ftArr = new int *[f_num];for (i = 0; i < f_num; i++){fvArr[i] = new int[3];fnArr[i] = new int[3];ftArr[i] = new int[3];}/////��ʼ��ʽ��ȡ����ifstream infile(addrstr.c_str());string sline; //ÿһ��int vIndex = 0, vnIndex = 0, vtIndex = 0;int fIndex = 0;int v, t, n;string str;while (getline(infile, sline)){if (sline.empty())continue;//��������if (sline[0] == 'v'){if (sline[1] == 'n') //vn{istringstream sin(sline); //istringstream������԰�һ���ַ�����Ȼ���Կո�Ϊ�ָ���Ѹ��зָ������sin >> str >> vnArr[vnIndex][0] >> vnArr[vnIndex][1] >> vnArr[vnIndex][2];vnIndex++;}else if (sline[1] == 't') //vt{istringstream sin(sline);sin >> str >> vtArr[vtIndex][0] >> vtArr[vtIndex][1] >> vtArr[vtIndex][2];vtIndex++;}else //v{istringstream sin(sline);sin >> str >> vArr[vIndex][0] >> vArr[vIndex][1] >> vArr[vIndex][2];vIndex++;}} //end if(sline[0]=='v')//������if (sline[0] == 'f') //�洢��{istringstream in(sline); //sline can be one of v, v//n, v/t, v/t/nif (sline.find("//") != string::npos) //˵����v//n   npos ��һ��������������ʾ�����ڵ�λ�� һ��ȡ-1{in >> str; //ȥ��f//              in >> v0 >>  "//" >> vn0;       //���������������޷�ʵ��sscanf���������Ĺ��ܣ�ֻ�ܻ�����sscanf�ˡ�in >> str;sscanf_s(str.c_str(), "%d//%d", &fvArr[fIndex][0], &fnArr[fIndex][0]);in >> str;sscanf_s(str.c_str(), "%d//%d", &fvArr[fIndex][1], &fnArr[fIndex][1]);in >> str;sscanf_s(str.c_str(), "%d//%d", &fvArr[fIndex][2], &fnArr[fIndex][2]);}else if (sscanf_s(sline.c_str(), "f %d/%d/%d", &v, &t, &n) == 3){fvArr[fIndex][0] = v;ftArr[fIndex][0] = t;fnArr[fIndex][0] = n;in >> str >> str; //��f�͵�һ��������ִ�������ȥin >> str;sscanf_s(str.c_str(), "%d/%d/%d", &fvArr[fIndex][1], &ftArr[fIndex][1], &fnArr[fIndex][1]);in >> str;sscanf_s(str.c_str(), "%d/%d/%d", &fvArr[fIndex][2], &ftArr[fIndex][2], &fnArr[fIndex][2]);}else if (sscanf_s(sline.c_str(), "f %d/%d", &v, &t) == 2){fvArr[fIndex][0] = v;ftArr[fIndex][0] = t;in >> str >> str; //��f�͵�һ��������ִ�������ȥin >> str;sscanf_s(str.c_str(), "%d/%d", &fvArr[fIndex][1], &ftArr[fIndex][1]);in >> str;sscanf_s(str.c_str(), "%d/%d", &fvArr[fIndex][2], &ftArr[fIndex][2]);}else //v{in >> str; //fin >> str;sscanf_s(str.c_str(), "%d", &fvArr[fIndex][0]);in >> str;sscanf_s(str.c_str(), "%d", &fvArr[fIndex][1]);in >> str;sscanf_s(str.c_str(), "%d", &fvArr[fIndex][2]);}fIndex++;} //end if(sline[0]=='f')}     //end whileinfile.close();return 0;
}glPushMatrix();galaxy_r = fabs(sin(angle_galaxy * 0.1)) * 0.8;galaxy_g = fabs(cos(angle_galaxy * 0.1)) * 0.6;galaxy_b = fabs(sin(angle_galaxy * 0.1)) * 0.4;emission_galaxy[0] = galaxy_r;emission_galaxy[1] = galaxy_g;emission_galaxy[2] = galaxy_b;glRotatef(angle_galaxy, 0,  0, 1);glTranslatef(20, -10, 3);drawObj(GL_POINTS);glTranslatef(-30, -40, 3);drawObj(GL_POINTS);glMaterialfv(GL_FRONT, GL_EMISSION, blank_Emission);glPopMatrix();void drawObj(int mode)
{glBegin(mode);glScalef(0.4, 0.4, 0.4);for (int i = 0; i < f_num; i++) //Ŀǰ���÷��												

opengl 读取obj模型相关推荐

  1. OPENGL读取OBJ模型(包围盒、法向等计算)附加源码与资源下载页面

    OPENGL读取OBJ模型 标签(空格分隔): OPENGL/C++ 哈哈,先贴出下载链接好吧.下载页面 首先大家不要害怕,读取obj模型听上去很高端很麻烦,其实当你真正了解obj模型的格式,以及OP ...

  2. opengl读取obj模型并绘制2.0

    此2.0版本是相较于我第一篇读取的文章而言的,第一篇文章只是一个简单的读取绘制程序,只能绘制单一物体,不实用. 2.0版本采用链式方式,绘制多个物体.链式方法的好处就是能够方便的添加材质数据(本文未讲 ...

  3. Java读取Obj模型

    Java写OpenGL项目时总要去加载一个Obj模型,或者导出导入操作,没必要用一大堆第三方包,一个类完事,兼容Window和Android 测试可以打开3DMax导出的Obj格式 导出的Obj也可以 ...

  4. OSG读取obj模型坐标变化的问题

    首先需要强烈吐槽一下OSG这个设计,在加载obj模型的时候,会默认将模型绕x轴逆时针旋转90度,让我整整找了两天的原因....这个设计真的太智障了.... 我们来看一下,有一个正方体的obj模型,用记 ...

  5. (01)VTK读取OBJ格式模型

    前言 使用vtk可以读取的模型格式非常有限,在此适应vtk加载.stl格式的工业数据(使用SolidWorks输出的或者CAD输出的,后来为了减少模型容量,用上SolidWorks将stl格式转换成了 ...

  6. 解析OBJ模型并将其加载到Unity3D场景中

    版权声明:本文由秦元培创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,转载请注明作者及出处,本文作者为秦元培,本文标题为解析OBJ模型并将其加载到Unit ...

  7. OpenGL OBJ模型加载.

    在我们前面绘制一个屋,我们可以看到,需要每个立方体一个一个的自己来推并且还要处理位置信息.代码量大并且要时间.现在我们通过加载模型文件的方法来生成模型文件,比较流行的3D模型文件有OBJ,FBX,da ...

  8. 读取obj+mtl 文件 (OpenGL C++)

    本学期我们开设了计算机图形学的课,最后的大作业老师要求做一个场景,为了使做出的场景更美观,写了这个读取obj文件的程序,从CG模型网上下载了一些模型并加载,如图所示,大部分的模型都能够加载成功,由于我 ...

  9. C++/OpenGL 入门(18):读取obj文件并贴图

    来源:<Computer Graphics Programming in OpenGL Using C++ >by V Scott Gordon John L Clevenger 内容:程 ...

最新文章

  1. 特征工程(feature engineering)是什么?特征工程(feature engineering)包含哪些方面?
  2. initrd映像文档的作用和制作
  3. 【Python基础】字符串专题总结
  4. C语言 满分代码 L1-047 装睡(解题报告)
  5. MySQL 19个规则数据库设计总结
  6. 自定义你的VSCode:主题、文件图标、快捷键、设置、schema、插件
  7. 第29月第14天 evpp
  8. ubuntu下python多版本切换问题
  9. 一分钟详解机器人手眼标定MATLAB及C++实现
  10. 2015年最新Scala语言视频教程
  11. nodejs下载安装和环境搭建,以及nodejs各个版本如何绿色下载
  12. Python中while循环的基本用法
  13. 怎样才能成为挑战年薪30W的运维工程师?
  14. Java 实习生(月薪 3k-5k 水平)应具备哪些知识、能力?给学弟学妹们支招
  15. va_list可变参数理解(va_start/va_end...)
  16. 剑道独尊 无上剑意(下)
  17. html项目成员分工合作,科研项目分工如何填写
  18. c32循迹小车c语言程序,STM32小车红外黑线循迹源程序
  19. 如何在GitHub上创建自己的仓库?
  20. LilyPond教程(5)——钢琴独奏片段 III

热门文章

  1. java中fido_一文读懂华为FIDO2指纹/3D 面容登录技术
  2. Vue中添加背景图片
  3. 伦敦 quant_伦敦统一用户组(LUUG)见面v1.0
  4. 12306接口协议分析
  5. app防御ddos/cc攻击
  6. 【数据分析】2022 年将占据主导地位的 3 种数据和分析趋势
  7. 获奖感想和Java学习总结
  8. 几款好用证件照制作工具推荐
  9. PrimeNG安装使用
  10. 啊哈算法-DFS解救小哈python版