解决在OpenGL中导入.obj模型所遇一些问题的方法

解决在OpenGL中导入.obj模型所遇一些问题的方法


最近在学习 LearnOpenGL CN,学到了模型加载那一章,遇到了一些错误,找到了一些解决办法,记录下来。

相对路径格式

“/”与“\”

在代码

Model ourModel(FileSystem::getPath("resources/objects/nanosuit/nanosuit.obj"));

处,我从文档中直接复制路径过来,粘贴,发现总是报错,原因是windows中路径分隔符像这样

D:\我的文件\OpenGL\input\input\resourses\objects\nanosuit

这里要注意“/”与“\”的区别,在VS中写“/”是最稳妥

相对路径起始

在这里填入的相对路径,指的是相对于main.cpp的路径,我的工程里,main.cpp的路径是
main.cpp所在位置

而LearnOpenGL CN中下载的资源所在位置是
nanosuit.obj
可见,main.cpp的绝对路径是
D:\我的文件\OpenGL\input\input
nanosuit.obj的绝对路径是
D:\我的文件\OpenGL\input\input\resourses\objects\nanosuit
nanosuit.obj相对于main.cpp的路径就是
resourses\objects\nanosuit

导入模型的限制

LearnOpenGL CN中,下载的模型nanosuit,此模型的纹理与模型文件在同一文件夹下,两者的关联属性可以在nanosuit.mtl中查看,这是个文本文件,要知道的是.mtl文件是.obj文件的附属文件,用以描述几何体表面的描影属性,告诉模型应该使用哪个贴图。
打开nanosuit.mtl
nanosuit.mtl
文理文件前并没有路径,所以该纹理文件与模型文件在同一目录下才能读取。
从网上下载其他模型,往往纹理文件与模型文件不在同一目录中,比如我下载的skull模型。
在这里插入图片描述
纹理保存在texture文件夹下,texture文件夹与模型文件.obj在同一目录下,这是应该查看.mtl文件,检查纹理与模型的关联路径,
在这里插入图片描述
如果在红框一处不像上图显示的带有**texture/**的相对路径,那么在LearnOpenGL CN 给出的代码中运行就会报错。所以检查.mtl文件后,改成正确的相对路径就可以了。

附上运行的skull =-=
skull

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
要给导入的.obj模型增加光照,首先需要了解光照模型的基本原理。在OpenGL,常用的光照模型有环境光、漫反射光和镜面光。 1. 环境光照:环境光是指场景无处不在的均匀光照,使得对象不会完全黑暗。为了使用环境光,我们需要设置环境光强度和环境光颜色。通过设置glLightfv函数的GL_LIGHT_MODEL_AMBIENT参数来实现,例如:glLightfv(GL_LIGHT_MODEL_AMBIENT, GL_AMBIENT, ambientLightColor); 2. 漫反射光照:漫反射光照是指光源照射到物体表面后,根据光线入射角和表面法线的夹角来计算反射光照。为了使用漫反射光,我们需要设置光源位置和光源的强度和颜色,以及模型表面的法线向量。通过设置glLightfv函数的GL_POSITION、GL_DIFFUSE和glNormal3f函数来实现,例如:glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLightColor);glNormal3f(objModelNormals[i].x, objModelNormals[i].y, objModelNormals[i].z); 3. 镜面光照:镜面光照是指光源照射到物体表面后,出射方向与光线入射方向相对称的反射光照。为了使用镜面光,我们需要设置视点位置、光源位置和光源的强度和颜色,以及模型表面的法线向量和视点方向。通过设置glLightfv函数的GL_POSITION、GL_DIFFUSE、GL_SPECULAR和glNormal3f函数来实现,例如:glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLightColor);glLightfv(GL_LIGHT0, GL_SPECULAR, specularLightColor);glNormal3f(objModelNormals[i].x, objModelNormals[i].y, objModelNormals[i].z);glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); 通过以上三种光照模型的设置,我们可以给导入的.obj模型增加光照效果。可以根据模型的具体需求,调整光源的位置、强度和颜色,以及模型表面的法线向量和视点方向,来获得想要的光照效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值