资源简介
实现读取obj文件并创建显示列表绘制图像,键盘可控制旋转、缩放图像功能
代码片段和文件信息
// lesson12_suchunyin.cpp : 此文件包含 “main“ 函数。程序执行将在此处开始并结束。
//
#include
#include
#include
#include
#include
#include
using namespace std;
int n = 30; //每一次转动30°
GLdouble view[2] = { 08 }; //设置旋转观察点初始位置
int i = 0; //旋转次数控制
GLdouble r = view[1]; //观察点旋转半径
float t = 0.5; //拉近拉远的距离
vector>vSets; //存放顶点(xyz)坐标
vector>fSets; //存放面的三个顶点索引
vector>lSets; //存放线的顶点索引
vector>cSets; //存放颜色
vector name; //存放每一部分名称
GLint part = -1; //每一部分的编号
string filePath = “D://计算机图形学//Squirtle.obj“;
void ObjLoader(string filename)
{
ifstream file(filename);
string line;
while (getline(file line))
{
if (line.substr(0 1) == “o“)
{
string str;
istringstream on(line.substr(2));
on >> str;
name.push_back(str);
part++;
}
else if (line.substr(0 1) == “c“)
{
vector color; //记录面对应的颜色
GLfloat R G B A;
istringstream cl(line.substr(2));
cl >> R; cl >> G; cl >> B; cl >> A;
color.push_back(R);
color.push_back(G);
color.push_back(B);
color.push_back(A);
cSets.push_back(color);
}
else if (line.substr(0 1) == “v“)
{
vector Point;
GLfloat x y z;
istringstream s(line.substr(2));
s >> x; s >> y; s >> z;
Point.push_back(x);
Point.push_back(y);
Point.push_back(z);
vSets.push_back(Point);
}
else if (line.substr(0 1) == “f“)
{
vector vIndexSets(4);
GLint u;
GLint v;
GLint w;
istringstream vtns(line.substr(2));
vtns >> u;
vtns >> v;
vtns >> w;
vIndexSets[0] = u - 1;
vIndexSets[1] = v - 1;
vIndexSets[2] = w - 1;
vIndexSets[3] = part;
fSets.push_back(vIndexSets);
}
else if (line.substr(0 1) == “l“)
{
vector lIndexSets;
GLint s t;
istringstream vt(line.substr(2));
vt >> s; vt >> t;
lIndexSets.push_back(s - 1);
lIndexSets.push_back(t - 1);
lSets.push_back(lIndexSets);
}
}
file.close();
}
GLint Squirtle = 1;
GLint MatrixMode = 2;
GLint VIEW = 3;
void createList() {
glNewList(Squirtle GL_COMPILE); //杰尼龟的显示列表
glBegin(GL_TRIANGLES); //开始绘制面
for (int i = 0; i < fSets.size(); i++) {
GLfloat VN[3];
//三个顶点
GLfloat SV1[3];
GLfloat SV2[3];
GLfloat SV3[3];
if ((fSets[i]).size() != 4) {
cout << “面顶点数组有误!“ << endl;
}
else {
//配置颜色:壳一个颜色,身体和尾巴一个颜色
glColor4f(cSets[fSets[i][3]][0] cSets[fSets[i][3]][1] cSets[fSets[i][3]][2] cSets[fSets[i][3]][3]);
GLint firstVertexIndex = (fSets[i])[0];//取出顶点索引
GLint secondVertexIndex = (fSets[i])[1];
GLint thirdVertexIndex = (fSets[i])[2];
SV1[0] = (vSets[firstVertexIndex])[0];//第一个顶点
SV1[1] = (vSets[firstVertexIndex])[1];
SV1[2] = (vSets[firstVertexIndex])[2];
SV2[0] = (vSets[secondVertexIndex])[0]; //第二个
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 156861 2020-05-11 00:02 ziyuan2\Squirtle.obj
文件 7791 2020-06-17 11:27 ziyuan2\ziyuan2.cpp
目录 0 2020-06-17 11:29 ziyuan2\
相关资源
- 3DsMAX人体骨骼模型可用于OPENGL读取处
- gultopengl开发安装包
- opengl实现的飞机
- opengl 绘制 棱锥
- glut环境工具包
- FreeGlut
- opengl光照小
- 无法打开包括文件 gl glaux.h No such fi
- openGL打包库
- opengl+vc写的太阳系演示源代码包含三
- OpenGL、FreeType 中文纹理绘制
- OpenGL 房子小院
- 基于OpenGL的贝塞尔曲线算法的实现
- 一个3d 飞机模型 可用opengl读取
- 基于openGL、pygame增强现实的视频实现
- Opengl 开发库, 动态链接库文件,op
- OpenGL战斗机飞行实现
- Opengl-光照球体
- OpenGL法向量计算
- GLUT库(glut.h、glut32.dll、glut32.lib)
- opengl的鼠标画线,圆,矩形,还有个
-
The Tao fr
amework 2.1.0 - OPENGL绘制三维地形图
- OpenGL实现对三维对象的旋转、平移和
- 在opengl里读取catia文件
- opengl二维图形转换为三维图形
- 三维模型文件中的OBJ格式在OpenGL中的
- opengl自行车动画实验报告
- OPENGL开发的茶壶光影、渲染、旋转、
- opengl 球体
评论
共有 条评论