资源简介
一个小程序,结合了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控件
相关资源
- 利用OpenGL写毛笔字算法
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
- opengl游戏编程徐明亮版(含源码)
- 用OPENGL画的一个简单的直升飞机
- opengl完美天空盒
- 3D绘图程序设计:使用Direct3D 10/9和Ope
- OpenGL绘制可运动自行车源程序.zip
- OpenGL实现飘动效果
- opengl室内场景的绘制,包括碰撞检测
- OpenGL场景漫游
- 用opengl实现的太阳系模型
- OpenGL 3D贪吃蛇程序,很小
- OpenGL爆炸碎片化效果 源码
- OpenGL三茶壶三光源光源绕着茶壶旋转
评论
共有 条评论