OpenGL完成对OFF文件的读取和使三维模型旋转


本代码是通过OpenGL实行对OFF文件的读取和对读取的三维模型添加旋转功能
资源截图
代码片段和文件信息
#include
#include

#include
#include
#include
#include
#pragma comment(lib“glew32.lib“)




const double DEFAULT_DELTA = 0.03;   //旋转偏移量
int sign = 1;                      //控制是顺时针旋转还是逆时针旋转,1为顺时针旋转。

//矩阵的存储位置
GLint matrixLocation;
int mainWindow;//

int Xaxis = 0;
int Yaxis = 1;
int Zaxis = 2;
int Axis = Xaxis;      //控制是x轴、y轴、z轴旋转。默认是x轴

vec3 Theta(0.0 0.0 0.0);


//Num_Vertices为顶点的个数
const int NUM_VERTICES = 8;            
const vec4 vertexColors[NUM_VERTICES] = {
vec4(0.0 0.0 0.0 1.0)  // Black 
vec4(1.0 0.0 0.0 1.0)  // Red 
vec4(1.0 1.0 0.0 1.0)  // Yellow 
vec4(0.0 1.0 0.0 1.0)  // Green 
vec4(0.0 0.0 1.0 1.0)  // Blue 
vec4(1.0 0.0 1.0 1.0)  // Magenta 
vec4(1.0 1.0 1.0 1.0)  // White 
vec4(0.0 1.0 1.0 1.0)   // Cyan 
};

int nVertices = 0;//顶点数
int nFaces = 0;//面数
int nEdges;//边数

std::vector points;    //存放每个顶点的信息
std::vector colors;    //存放每个顶点的颜色信息
std::vector vertices;  //存放每个顶点的坐标信息

/*
存放每个顶点的坐标和颜色信息
*/
void storePoints(int a int b int c)
{
points.push_back(vertices[a]);
points.push_back(vertices[b]);
points.push_back(vertices[c]);

colors.push_back(vertexColors[a]);
colors.push_back(vertexColors[b]);
colors.push_back(vertexColors[c]);
}
/*
读取off文件
*/
void read_off(const std::string filename)
{

if (filename.empty()) {//如果文件为空,则直接返回
return;
}
std::ifstream fin;
int i = 0;
fin.open(filename);
std::string str;
fin >> str;             //str的内容为OFF
fin >> nVertices;        //顶点数
fin >> nFaces;           //面数
fin >> nEdges;           //边数

for (i = 0; i < nVertices; i++)         //读取off中的点坐标数据,存放在points中
{
double n1 = 0;
double n2 = 0;
double n3 = 0;
double n4 = 0;
fin >> n1;                          //其坐标值有四个
fin >> n2;
fin >> n3;
fin >> n4;
vec4 new_vec3(n1 n2 n3 n4);

vertices.push_back(new_vec3);
}

for (i = 0; i < nFaces; i++)            //读取每个面的信息
{
int n1 = 0;
int n2 = 0;                         //每行的第一个为顶点数,
int n3 = 0;
int n4 = 0;
fin >> n1;
fin >> n2;
fin >> n3;
fin >> n4;
storePoints(n2 n3 n4);
}
fin.close();
}

void init()
{
read_off(“cube.off“);

// 创建顶点数组对象
GLuint vao[1];
glGenVertexArrays(1 vao);
glBindVertexArray(vao[0]);

// 创建并初始化顶点缓存对象
GLuint buffer;
glGenBuffers(1 &buffer);
glBindBuffer(GL_ARRAY_BUFFER buffer);
glBufferData(GL_ARRAY_BUFFER points.size() * sizeof(vec4) + colors.size() * sizeof(vec4)
NULL GL_STATIC_DRAW);

// 分别读取数据
glBufferSubData(GL_ARRAY_BUFFER 0 points.size() * sizeof(vec4) &points[0]);
glBufferSubData(GL_ARRAY_BUFFER points.size() * sizeof(vec4) colors.size() * sizeof(vec4) &colors[0]);

// 读取着色器并使用
GLuint program = InitShader(“vshader.glsl“ “fshader.glsl“);
glUseProgram(program);

// 从顶点着色器中初始化顶点的位置
GLuint pLocation = glGetAttribLocation(program “vPosit

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-10-22 20:20  2014150213-欧阳炼均-实验二
     目录           0  2016-10-20 22:45  2014150213-欧阳炼均-实验二.vs
     目录           0  2016-10-20 22:45  2014150213-欧阳炼均-实验二.vs实验二
     目录           0  2016-10-20 22:45  2014150213-欧阳炼均-实验二.vs实验二v14
     文件       37888  2016-10-22 20:20  2014150213-欧阳炼均-实验二.vs实验二v14.suo
     目录           0  2016-10-22 20:20  2014150213-欧阳炼均-实验二Debug
     文件      134656  2016-10-22 20:13  2014150213-欧阳炼均-实验二Debug实验二.exe
     文件     1137924  2016-10-22 20:13  2014150213-欧阳炼均-实验二Debug实验二.ilk
     文件     1585152  2016-10-22 20:13  2014150213-欧阳炼均-实验二Debug实验二.pdb
     目录           0  2016-10-22 20:20  2014150213-欧阳炼均-实验二实验二
     文件        1309  2016-10-20 22:45  2014150213-欧阳炼均-实验二实验二.sln
     文件    33468416  2016-10-22 20:20  2014150213-欧阳炼均-实验二实验二.VC.db
     目录           0  2016-10-20 22:46  2014150213-欧阳炼均-实验二实验二Common
     文件        2292  2016-09-05 17:17  2014150213-欧阳炼均-实验二实验二CommonInitShader.cpp
     文件         321  2016-10-20 23:02  2014150213-欧阳炼均-实验二实验二cube.off
     目录           0  2016-10-22 20:20  2014150213-欧阳炼均-实验二实验二Debug
     文件       60243  2016-10-20 22:47  2014150213-欧阳炼均-实验二实验二DebugInitShader.obj
     文件      409789  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debugmain.obj
     文件      393514  2016-10-22 16:14  2014150213-欧阳炼均-实验二实验二Debugmain.obj.enc
     文件      855040  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debugvc140.idb
     文件      561152  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debugvc140.pdb
     文件        1564  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.log
     目录           0  2016-10-22 20:20  2014150213-欧阳炼均-实验二实验二Debug实验二.tlog
     文件        1230  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.tlogCL.command.1.tlog
     文件       54012  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.tlogCL.read.1.tlog
     文件        1016  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.tlogCL.write.1.tlog
     文件        1106  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.tloglink.command.1.tlog
     文件        3690  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.tloglink.read.1.tlog
     文件         394  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.tloglink.write.1.tlog
     文件         193  2016-10-22 20:13  2014150213-欧阳炼均-实验二实验二Debug实验二.tlog实验二.lastbuildstate
     文件          88  2016-09-16 13:26  2014150213-欧阳炼均-实验二实验二fshader.glsl
............此处省略9个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)