捉虫日记:使用OpenGL加载模型 (2023/12/11)
前天晚上,花了一个小时解决了编译Assimp时的报错问题,顺便写了篇随笔。今天继续OpenGL的学习,不出意料地再次踩坑,好在最后都解决了。
今天主要学习使用Assimp加载模型,原理很简单:一个模型可以看作是许多个网格(Mesh)组成,只需要把这些Mesh画出来就好。写好代码后点击编译,出现了最让人咬牙切齿的一幕:只能看到背景色。

说实话,这种情况比直接报错还难受,报错最起码还能大概知道错在哪儿。是贴图没有成功加载吗?如果只是贴图加载失败,应该会出现一块一块的黑色,不应该什么都看不到。
在我的代码中,实现了一个Model类和一个Mesh类,其中Model类保存着一个Mesh类的vector.
首先我采用的是“肉眼debug”, 一行一行地与参考代码比较,没找到问题。没办法,慢慢来吧。
先检查Mesh类,自己编了一些数据,实例化一个Mesh对象,并把它画到屏幕上,果然还是看不到任何东西,这样的话,应该是Mesh类出了问题。
最后找到了问题所在:绑定数据前,忘了绑定VAO. 加上下面这行代码:
glBindVertexArray(mVAO);
点击运行,可以看到以下画面:

太好了,终于有东西出来了!但我这个机器人看起来不太对劲:它应该有双红色的玻璃眼睛(图中看不到),而且这个机器人看起来不太完整,有些部位看上去少了些什么。
这下应该是贴图的问题了吧,我又不自觉地联想到贴图上,但是经过测试,贴图文件都被正常读取。突然,我灵光一闪:这种效果好像在哪里见过?对了,是不是忘开深度测试了?
检查代码,果然没有启用深度测试,加上下面这行代码:
glEnable(GL_DEPTH_TEST);
启用后,模型正常显示:

光是改这两个bug就花了两个小时,又是被自己蠢哭的一天,好气哦。
捉虫日记:使用OpenGL加载模型 (2023/12/11)的更多相关文章
- 使用vs2022编译assimp,并基于OpenGL加载模型
Assimp :全称为Open Asset Import Library,这是一个模型加载库,可以导入几十种不同格式的模型文件(同样也可以导出部分模型格式).只要Assimp加载完了模型文件,我们就可 ...
- NeHe OpenGL教程 第三十一课:加载模型
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型
[iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读 ...
- openGL加载obj文件+绘制大脑表层+高亮染色
绘制大脑表层并高亮染色的工作是以openGL加载obj文件为基础的,这里是我们用到的原始程序:只能加载一个obj文件的demo. 然而,一个完整的大脑表层是由很多分区组成的,因此我们的程序需要支持两个 ...
- tensorflow学习笔记2:c++程序静态链接tensorflow库加载模型文件
首先需要搞定tensorflow c++库,搜了一遍没有找到现成的包,于是下载tensorflow的源码开始编译: tensorflow的contrib中有一个makefile项目,极大的简化的接下来 ...
- 深度学习原理与框架-猫狗图像识别-卷积神经网络(代码) 1.cv2.resize(图片压缩) 2..get_shape()[1:4].num_elements(获得最后三维度之和) 3.saver.save(训练参数的保存) 4.tf.train.import_meta_graph(加载模型结构) 5.saver.restore(训练参数载入)
1.cv2.resize(image, (image_size, image_size), 0, 0, cv2.INTER_LINEAR) 参数说明:image表示输入图片,image_size表示变 ...
- PyTorch保存模型与加载模型+Finetune预训练模型使用
Pytorch 保存模型与加载模型 PyTorch之保存加载模型 参数初始化参 数的初始化其实就是对参数赋值.而我们需要学习的参数其实都是Variable,它其实是对Tensor的封装,同时提供了da ...
- [Pytorch]Pytorch 保存模型与加载模型(转)
转自:知乎 目录: 保存模型与加载模型 冻结一部分参数,训练另一部分参数 采用不同的学习率进行训练 1.保存模型与加载 简单的保存与加载方法: # 保存整个网络 torch.save(net, PAT ...
- tensorflowjs下载源文件到本地不能加载模型解决方案
大多数情况(非源文件错误)下载源文件到本地不能加载模型,那么你可能需要搭建一个本地WEB服务器. 1.安装apache或ngnix,可以参照这个博客 2.强烈推荐一个Chrome插件Web Serve ...
- WPF 3D动态加载模型文件
原文:WPF 3D动态加载模型文件 这篇文章需要读者对WPF 3D有一个基本了解,至少看过官方的MSDN例子. 一般来说关于WPF使用3D的例子,都是下面的流程: 1.美工用3DMAX做好模型,生成一 ...
随机推荐
- webpack配置自动打包相关的参数
- web-云部署上线
- [转帖]【性能】大页内存 (HugePages)在通用程序优化中的应用
目录 1. 背景 2. 基于指纹的音乐检索简介 3. 原理 4. 小页的困境 5. 大页内存的配置和使用 6. 大页内存的优化效果 7. 大页内存的使用场景 8. 总结 LD_PRELOAD用法 原文 ...
- 一键部署Docker中间件简单方法-redis为例
一键部署Docker中间件简单方法-redis为例 背景 想能够快速部署一些中间件. 写文档虽然可以, 但是总会有人问, 能够一键部署应该最好不过. 下载以及导出镜像 docker pull redi ...
- [转帖]MYSQL--表分区、查看分区
https://www.cnblogs.com/pejsidney/p/10074980.html 一. mysql分区简介 数据库分区 数据库分区是一种物理数据库设计技术.虽然分区技术可 ...
- [转帖]Linux字符截取命令-cut
概述 cut是一个选取命令,.一般来说,选取信息通常是针对"行"来进行分析的,并不是整篇信息分析的. 语法 cut [-bn] [file] 1 或 cut [-c] [file] ...
- [转帖]KingbaseES和Oracle数据类型的映射表
随着数据库国产化的进程,Oracle向KingbaseES数据库的数据迁移需求也越来越多.数据库之间数据迁移的时候,首先遇到的,并且也是最重要的,就是数据类型之间的转换. 下表为KingbaseES和 ...
- [转帖]Linux—解压缩命令总结(tar/zip)
https://www.jianshu.com/p/1ad5d852d13b 1 tar 1.2 tar介绍 tar命令是linux系统中对文件和目录解压缩命令.tar命令可以用于对后缀名为.ta ...
- shell的date的部分处理--需要记住..
在Linux中,可以使用date命令获取日期, date 获取当前完整日期 date --date="3 days ago" 获取3天前的完整日期 date --date=&quo ...
- [转帖]Web性能优化工具WebPageTest(三)——本地部署(Windows 7版本)
http://www.zlprogram.com/Show/30/30117.shtml 这次先能够使用PC端的浏览器测试,首先需要下载官方的发布版本"WebPageTest 3.0&quo ...