資源簡介
一個小程序,結合了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.em
?????文件????????472??2014-01-18?14:33??file\Debug\file.exe.em
?????文件????????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\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
?????文件??????????2??2014-01-18?22:56??file\Debug\li
............此處省略49個文件信息
- 上一篇:文件名批量大小寫轉換工具
- 下一篇:QRMaker.ocx控件
評論
共有 條評論