資源簡介
通過opengl實現(xiàn)obj模型的讀取、繪制。對于沒有給出法向的模型,自動計算其法向、畫出模型包圍盒、同時將模型移動到視點中心,便于觀察

代碼片段和文件信息
#include“model.h“
#include
//構(gòu)造函數(shù)
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();
}
//讀取模型數(shù)據(jù)的相關(guān)操作??根據(jù)str中?KEY的數(shù)量來判斷str中存儲數(shù)據(jù)格式
int?findKey(string?str?char?key)?{
int?value?=?0;
for?(int?i?=?0;?i? if?(str[i]?==?key)
value++;
return?value;
}
//讀取模型數(shù)據(jù)的相關(guān)操作??讀取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];
}
//讀取模型數(shù)據(jù)的相關(guān)操作??讀取f中?的索引信息 重載函數(shù)
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>rawNormal(v_num);
for?(int?i?=?0;?i? rawNormal[i].resize(3);
vectorv1(3);
vectorv2(3);
vectorf_norm1(3);
vectorf_norm2(3);
vectorf_norm3(3);
for?(int?i?=?0;?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++)?{ //根據(jù)三個點算出三個法向,平均之后作為每個點的法向
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\li
?????文件????????3740??2017-05-02?20:24??實驗一_讀取模型_完整\實驗一_讀取模型\Debug\實驗一_讀取模型.tlog\li
?????文件?????????658??2017-05-02?20:24??實驗一_讀取模型_完整\實驗一_讀取模型\Debug\實驗一_讀取模型.tlog\li
?????文件?????????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
評論
共有 條評論