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

本文介绍了一种使用OpenGL加载OBJ文件的方法,通过解析文件中的顶点、纹理坐标和法向量信息,将3D模型进行显示。核心代码展示了如何处理OBJ文件中的数据,并在OpenGL环境中进行坐标和纹理坐标的获取与应用,最终实现三维模型的渲染。运行结果显示模型成功在屏幕上展示。
摘要由CSDN通过智能技术生成

【图形学】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.运行结果

在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码两年半的练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值