捉虫日记:使用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做好模型,生成一 ...
随机推荐
- 记一次 .NET某道闸收费系统 内存溢出分析
一:背景 1. 讲故事 前些天有位朋友找到我,说他的程序几天内存就要爆一次,不知道咋回事,找不出原因,让我帮忙看一下,这种问题分析dump是最简单粗暴了,拿到dump后接下来就是一顿分析. 二:Win ...
- vue监听数组变化
1 // 触发更新视图 2 function updateView() { 3 console.log('视图更新') 4 } 5 6 // 重新定义数组原型 7 const oldArrayProp ...
- macOX常用快捷键(结尾有彩蛋)
macOX的快捷键与windows10有所不同,了解了以后会更加提高我们的工作效率. Mac中主要有四个修饰键,分别是Command,Control,Option和Shift. 一.基本的快捷键: C ...
- java项目实践-cookie-session-day18
目录 1. cookie 2. session 3. servletcontext 4.servletConfig 1. cookie cookie 在客户端(浏览器)中保持http状态的 信息技术 ...
- Python Code_04InputFunction
代码部分 # coding:utf-8 # author : 写bug的盼盼 # development time : 2021/8/28 6:55 present = input('你想要什么?') ...
- SQLServer性能优化之二
SQLServer性能优化之二 背景 优化了机器的硬件配置之后性能好了很多 但是偶尔还是会出现阻塞. SQL总是奇奇怪怪的. 其实第一天时就感觉可能是索引存在问题. 但是dbcc 重建所有数据库的索引 ...
- Oracledb_exporter 获取表大小信息的简单方法
Oracledb_exporter 获取表大小信息的简单方法 背景 用我儿子的现状作为背景: 我爱学习, 学习让我妈快乐. 下载exporter exporter 可以在github上面下载最新版本是 ...
- [转帖]linux shell 中数组的定义和for循环遍历的方法
https://www.cnblogs.com/ysk123/p/11510718.html linux 中定义一个数据的语法为: variable=(arg1 arg2 arg3 ....) 中间用 ...
- [转帖]vm内核参数之缓存回收drop_caches
注:本文分析基于3.10.0-693.el7内核版本,即CentOS 7.4 1.关于drop_caches 通常在内存不足时,我们习惯通过echo 3 > /proc/sys/vm/drop_ ...
- Spring 应用合并之路(一):摸石头过河 | 京东云技术团队
公司在推进降本增效,在尝多种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适).那么,将相近应用做一个合并,减少维护项目,提高机器利用率就是一个可选方案. 经 ...