资源简介
通过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\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
相关资源
- SWAT模型源代码快速查看手册适用于开
- opengl + glfw _glad 实现天空盒
- Simulating planar reflection using two-pass re
- Model-Driven Software Engineering in Practice
- uml公交查询系统设计模型
- 驱动开发工具=DebugView+DriverMonitor+IRP
- 基于STRAIGHT模型的语音转换的研究
- 模型检测工具spin
- OpenGL球体绘制与球体贴图
- Naruto.zip
- 使用OpenGL绘制Bezier曲线
- OpenGL卡通人脸绘制
- 电子科大UESTC_OPENGL三维图形程序设计
- SCM信道模型.pdf
- 基于节约算法的邮路、邮车规划
- DirectX 材质 模型 工具汉化版
-
org.json.JSONob
ject引用依赖包 - sphinx 声学模型和词典
- 图形学,利用OpenGL函数进行鼠标、键
- SEM -结构方程模型PPT
- hmm(隐马尔可夫模型)算法代码汇总
- 用于3D飞行模拟器FlightGear中飞行动力
- Unity 最新T4M地形插件,适用于5.6以上
- ARCGIS模型构建器教程
- Introduction to Probability Models (Sheldon
- opengl 读取与显示obj文件
- GLFW-3.2.bin.WIN32
- PADS_VX Xpidition 通用3D模型
- 差速器三维模型
- OpenGL实现画球体算法的源码
评论
共有 条评论