图形学OBJ文件加载类完成图像显示

Posted 敲代码两年半的练习生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图形学OBJ文件加载类完成图像显示相关的知识,希望对你有一定的参考价值。

【图形学】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文件加载类完成图像显示的主要内容,如果未能解决你的问题,请参考以下文章

一步步学Metal图形引擎4-《OBJ模型加载》

9.1 使用QPxmap类加载图片

ViewPager2 中未显示图像(片段重新打开时)

利用MFC Document/View框架完成图形显示和保存功能

vb中控件图形框如何加载图片

从 obj 文件加载时显示单色而不是纹理