• 大小: 326.19 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-10-24
  • 语言: 其他
  • 标签: OpenGL  读obj文件  

资源简介

一个小程序,结合了OpenGL和读取三维模型文件。先使用SolidWorks建立一个法兰的模型,保存为obj文件格式,再在C++控制台程序中读取其数据,利用OpenGL显示出来。

资源截图

代码片段和文件信息

// file.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include “gl\glut.h“
#include “gl\GLU.h“
#include
#include  
using std::vector;

GLint winWidth=600 winHeight=600;

struct  GLpoint
{
GLfloat x;
GLfloat y;
GLfloat z;
};

struct GLlist
{
GLint one;
GLint two;
GLint three;
};

GLint   vertexCount faceCount i;
vector  vertex;
vector  face;

void readOBJFile(char* FileName)
{
FILE *file;
file = fopen(FileName “r“);

vertexCount=faceCount=0;
char      buf[128];
GLpoint point={0 0 0};
vertex.push_back(point);

GLlist   faceList;
while(fgets(buf 128 file))
{
if (buf[0] == ‘v‘)
{
sscanf(buf “%*c %f %f %f“ &point.x &point.y &point.z);  
vertex.push_back(point);
vertexCount++;
}
else if (buf[0] == ‘f‘)
{
sscanf(buf “%*c %d %d %d“ &faceList.one &faceList.two &faceList.three);
face.push_back(faceList);
faceCount++;
}  
}
//统计顶点数和面数
/*while(fscanf(file “%s“ buf) != EOF) 
{
switch(buf[0])
{
case ‘#‘: / * comment  eat up rest of line * /
fgets(buf sizeof(buf) file); break;
case ‘v‘: / * v * /
if(buf[1]==‘\0‘)
{
fgets(buf sizeof(buf) file);
vertexCount++;
}
break;
case ‘f‘: / * face * /
fscanf(file “%d“ buf);
fscanf(file “%d“ buf);
fscanf(file “%d“ buf);
faceCount++;
break;
default:
/ * eat up rest of line * /
fgets(buf sizeof(buf) file);
break;
}
}
fclose(file);

vertex=new GLfloat *[vertexCount+1];
for(i=0; i vertex[vertexCount]=new GLfloat [3];

face  =new GLint *[faceCount];
for(i=0; i face[faceCount]=new GLint[3];

vertexCount=1; //从1开始
faceCount=0;
file = fopen(“DN100法兰.obj“ “r“);
while(fgets(buf 128 file)) 
{
if (buf[0] == ‘v‘)
{
sscanf(buf “%*c %f %f %f“ &vertex[vertexCount][0] &vertex[vertexCount][1] &vertex[vertexCount][2]);                  
vertexCount++;

else if (buf[0] == ‘f‘)
{
sscanf(buf “%*c %d %d %d“ &face[faceCount][0] &face[faceCount][1] &face[faceCount][2]);
faceCount++;
}   
}*/
fclose(file);
}

void init(void)
{
char * file=“DN100法兰.obj“;
readOBJFile(file);
}

void reshape(int cx int cy)
{
glEnable(GL_DEPTH_TEST);
glClearColor(0.0 0.0 0.0 0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

GLfloat m_aspect;
if(cy==0)
{
m_aspect=(GLfloat)cx;
}
else
{
m_aspect=(GLfloat)cx/(GLfloat)cy;
}
glViewport(0 0 (GLfloat)cx (GLfloat)cy);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
/*glOrtho(xwMin xwMax ywMin ywMax dnear dfar); */      //正交投影
gluPerspective(50 m_aspect 10 10000); //对称透视投影
/*glFrustum(xwMin xwMax ywMin ywMax dnear dfar); */ //通用透视投影

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0 500 0 0 0 0 0 0 1);
}

void

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1578  2014-01-18 22:56  file\Debug\cl.command.1.tlog

     文件      10750  2014-01-18 22:56  file\Debug\CL.read.1.tlog

     文件       1128  2014-01-18 22:56  file\Debug\CL.write.1.tlog

     文件        406  2014-01-18 14:33  file\Debug\file.exe.embed.manifest

     文件        472  2014-01-18 14:33  file\Debug\file.exe.embed.manifest.res

     文件        381  2014-01-18 22:56  file\Debug\file.exe.intermediate.manifest

     文件         95  2014-01-18 22:56  file\Debug\file.lastbuildstate

     文件       3685  2014-01-18 22:56  file\Debug\file.log

     文件     158098  2014-01-18 22:56  file\Debug\file.obj

     文件    1245184  2014-01-18 14:30  file\Debug\file.pch

     文件        198  2014-01-18 14:33  file\Debug\file_manifest.rc

     文件          2  2014-01-18 22:56  file\Debug\link-cvtres.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link-cvtres.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1076-cvtres.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1076-cvtres.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1076.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1076.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1860-cvtres.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1860-cvtres.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1860.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1860.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1964-cvtres.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1964-cvtres.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1964.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.1964.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.2224-cvtres.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.2224-cvtres.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.2224.read.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.2224.write.1.tlog

     文件          2  2014-01-18 22:56  file\Debug\link.2456-cvtres.read.1.tlog

............此处省略49个文件信息

评论

共有 条评论