图形学OBJ文件加载类完成图像显示
Posted 敲代码两年半的练习生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图形学OBJ文件加载类完成图像显示相关的知识,希望对你有一定的参考价值。
1.绘制目标
完成OBJ文件加载类
完成三维模型的最终显示
2.核心代码
ObjFileLoader.cpp
if (head == "v") { // 处理顶点坐标
// TO DO: 获取顶点的X, Y, Z坐标并将其存入m_verts数组
float my_array[3];
iss >> my_array[0] >> my_array[1] >> my_array[2];
m_verts.push_back(my_array[0]);
m_verts.push_back(my_array[1]);
m_verts.push_back(my_array[2]);
}
else if (head == "vt") { // 处理纹理坐标
// TO DO: 获取纹理的s, t坐标并将其存入m_textures数组
float my_array2[2];
iss >> my_array2[0] >> my_array2[1];
m_textures.push_back(my_array2[0]);
m_textures.push_back(my_array2[1]);
}
else if (head == "vn") { // 处理法向量坐标
// TO DO: 获取法向量的X, Y, Z坐标并将其存入m_normals数组
float my_array3[3];
iss >> my_array3[0] >> my_array3[1] >> my_array3[2];
m_normals.push_back(my_array3[0]);
m_normals.push_back(my_array3[1]);
m_normals.push_back(my_array3[2]);
}
void ObjFileLoader::get_vertex_at(unsigned int id, float* vertexCoords) {
assert(id >= 0 && id < m_verts.size());
// TO DO: 请从m_verts获取指定id处的X, Y, Z坐标并将其写入vertexCoords数组中
vertexCoords[0] = m_verts[id * 3];
vertexCoords[1] = m_verts[id * 3 + 1];
vertexCoords[2] = m_verts[id * 3 + 2];
}
void ObjFileLoader::get_texture_at(unsigned int id, float* textureCoords) {
assert(id >= 0 && id < m_textures.size());
// TO DO: 请从m_textures获取指定id处的s, t坐标并将其写入textureCoords数组中
textureCoords[0] = m_textures[id * 2];
textureCoords[1] = m_textures[id * 2 + 1];
}
task.cpp
// TO DO : 获取并指定三角形三个顶点处的纹理坐标以及X,Y,Z空间坐标
OBJ_FILE_LOADER.get_vertex_at(t.m_vertex_ids[j], vertex_coords);
OBJ_FILE_LOADER.get_texture_at(t.m_texture_ids[j], texture_coords);
glTexCoord2f(texture_coords[0], texture_coords[1]);
glVertex3f(vertex_coords[0], vertex_coords[1], vertex_coords[2]);
// TO DO: 设置照相机
gluLookAt(0.0, 0.0, 600.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
// TO DO: 设置投影变换矩阵
gluPerspective(60, float(w) / float(h), 10.0, 1000.0);
3.运行结果
以上是关于图形学OBJ文件加载类完成图像显示的主要内容,如果未能解决你的问题,请参考以下文章