资源简介

通过opengl实现obj模型的读取、绘制。对于没有给出法向的模型,自动计算其法向、画出模型包围盒、同时将模型移动到视点中心,便于观察

资源截图

代码片段和文件信息

#include“model.h“
#include

//构造函数
Objmodel::Objmodel() {
v_num = 0;
vt_num = 0;
vn_num = 0;
f_num = 0;
value = false;
}

Objmodel::~Objmodel() {
v_num = 0;
vt_num = 0;
vn_num = 0;
f_num = 0;
vertex.clear();
vertex_texture.clear();
vertex_normal.clear();
face_vertex.clear();
face_normal.clear();
face_texture.clear();
face_normal.clear();
}


//读取模型数据的相关操作  根据str中 KEY的数量来判断str中存储数据格式
int findKey(string str char key) {
int value = 0;
for (int i = 0; i < str.length(); i++)
if (str[i] == key)
value++;
return value;
}

//读取模型数据的相关操作  读取f中 的索引信息
void getNum(string str vector &fv vector &fo) {
int num = 0;
int det = 0;
vectorff(6);
for (int i = 0; str[i] != ‘\0‘ && det<6; i++) {
if (str[i] >= ‘0‘ && str[i] <= ‘9‘)
num = num * 10 + str[i] - ‘0‘;
else {
if (num != 0) {
ff[det] = num;
det++;
num = 0;
}
}
}
fv[0] = ff[0]; fv[1] = ff[2]; fv[2] = ff[4];
fo[0] = ff[1]; fo[1] = ff[3]; fo[2] = ff[5];
}

//读取模型数据的相关操作  读取f中 的索引信息 重载函数
void getNum(string str vector &fv vector &ft vector &fn) {
int num = 0;
int det = 0;
vectorff(9);
for (int i = 0; str[i] != ‘/0‘&& det < 9; i++) {
if (str[i] >= ‘0‘ && str[i] <= ‘9‘)
num = num * 10 + str[i] - ‘0‘;
else {
if (num != 0) {
ff[det] = num;
det++;
num = 0;
}
}
}
fv[0] = ff[0]; fv[1] = ff[3]; fv[2] = ff[6];
ft[0] = ff[1]; ft[1] = ff[4]; ft[2] = ff[7];
fn[0] = ff[2]; fn[1] = ff[5]; fn[2] = ff[8];
}

vector vectorCross(vector v1 vector v2) {
vector result(3);
result[0] = v1[1] * v2[2] - v1[2] * v2[1];
result[1] = v1[2] * v2[0] - v1[0] * v2[2];
result[2] = v1[0] * v2[1] - v1[1] * v2[1];
return result;
}

//计算法向
void Objmodel::calculateNormal() {
value = true;
vector< vector>rawNormal(v_num);
for (int i = 0; i < v_num; i++)
rawNormal[i].resize(3);
vectorv1(3);
vectorv2(3);
vectorf_norm1(3);
vectorf_norm2(3);
vectorf_norm3(3);
for (int i = 0; i < f_num; i++) {
for (int j = 0; j < 3; j++) {
v1[j] = vertex[face_vertex[i][1]-1][j] - vertex[face_vertex[i][0]-1][j];
v2[j] = vertex[face_vertex[i][2]-1][j] - vertex[face_vertex[i][1]-1][j];
}
//叉乘1
f_norm1 = vectorCross(v1 v2);
v1 = v2;
for (int j = 0; j < 3; j++) {
v2[j] = vertex[face_vertex[i][0] - 1][j] - vertex[face_vertex[i][2] - 1][j];
}
//叉乘2
f_norm2 = vectorCross(v1 v2);
v1 = v2;
for (int j = 0; j < 3; j++) {
v2[j] = vertex[face_vertex[i][1] - 1][j] - vertex[face_vertex[i][0] - 1][j];
}
//叉乘3
f_norm3 = vectorCross(v1 v2);

for (int i = 0; i < 3; i++) { //根据三个点算出三个法向,平均之后作为每个点的法向
f_norm1[0] = (f_norm1[0] + f_norm2[0] + f_norm3[0]) / 3.0f;
f_norm1[1] = (f_norm1[1] + f_norm2[1] + f_norm3[1]) / 3.0f;
f_norm1[2] = (f_norm1[2] + f_norm2[2] + f_norm3[2

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-05-09 20:04  实验一_读取模型_完整\
     目录           0  2017-05-09 20:04  实验一_读取模型_完整\实验一_读取模型\
     文件        1348  2017-04-18 19:06  实验一_读取模型_完整\实验一_读取模型.sln
     目录           0  2017-05-09 20:04  实验一_读取模型_完整\实验一_读取模型\Debug\
     文件      825159  2017-05-02 20:17  实验一_读取模型_完整\实验一_读取模型\Debug\model.obj
     文件      712650  2017-04-26 15:24  实验一_读取模型_完整\实验一_读取模型\Debug\model.obj.enc
     文件      953344  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\vc140.idb
     文件      643072  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\vc140.pdb
     文件        1106  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.log
     目录           0  2017-05-09 20:04  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\
     文件        1410  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\CL.command.1.tlog
     文件       61928  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\CL.read.1.tlog
     文件        1746  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\CL.write.1.tlog
     文件        2586  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\link.command.1.tlog
     文件        3740  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\link.read.1.tlog
     文件         658  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\link.write.1.tlog
     文件         224  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\实验一_读取模型.tlog\实验一_读取模型.lastbuildstate
     文件      254749  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\Debug\源.obj
     文件      229366  2017-04-30 18:03  实验一_读取模型_完整\实验一_读取模型\Debug\源.obj.enc
     文件       11154  2017-05-02 20:16  实验一_读取模型_完整\实验一_读取模型\model.cpp
     文件        1064  2017-05-02 20:06  实验一_读取模型_完整\实验一_读取模型\model.h
     目录           0  2017-05-09 20:04  实验一_读取模型_完整\实验一_读取模型\obj\
     文件       66707  2017-04-18 19:10  实验一_读取模型_完整\实验一_读取模型\obj\bird.obj
     文件      394444  2017-04-18 19:10  实验一_读取模型_完整\实验一_读取模型\obj\rubby.obj
     文件       17844  2017-04-18 19:10  实验一_读取模型_完整\实验一_读取模型\obj\torus.obj
     文件      323736  2017-04-12 10:39  实验一_读取模型_完整\实验一_读取模型\obj\wan.obj
     文件      216576  2017-05-02 20:24  实验一_读取模型_完整\实验一_读取模型\实验一_读取模型.exe
     文件        7505  2017-04-18 19:52  实验一_读取模型_完整\实验一_读取模型\实验一_读取模型.vcxproj
     文件        1151  2017-04-18 19:52  实验一_读取模型_完整\实验一_读取模型\实验一_读取模型.vcxproj.filters
     文件        4846  2017-05-09 19:13  实验一_读取模型_完整\实验一_读取模型\源.cpp

评论

共有 条评论