现象:
自车模型本地渲染成功, MDC上无贴图
使用引用方式加载贴图, 贴图有了, 但部分贴图不对
问题定位
看起来是画mesh的时候就不对, 深度测试是开启的
车体模型太复杂, 使用较简单的模型测试:
简单模型本地渲染与MDC渲染对比:ng
仔细比对后发现没有纹理时的网格就不对,
加载图片前使图片翻转可以验证不是纹理贴图的问题
问题定位: 基本确定是顶点或深度缓冲的问题
顶点问题: 将mesh构造函数里的数据打印与本地打印的数据对比, 完全一样
深度缓冲: 使用深度缓冲后, 效果并未改善
关闭光照, 减少影响因素
至此可以看出模型各模块间融合的不好, 且深度缓冲未生效, opengl代码中已加入深度缓冲代码, openglwindow可能未开启深度缓冲? 本地关闭深度缓冲与MDC对比
忽略动画可看出本地与MDC上结果是一样的,
结论: 问题产生原因是MDC上QOpenGLWindow不会默认打开深度测试
- 寻找QOpenGLWindow打开深度缓存的接口 - 失败
- 使用Face culling的方式替代深度缓冲 - 失败
- 使用FBO实现深度测试 – demo测试成功
默认情况下, OpenGL使用的帧缓存是由窗体系统创建和管理的(MDC深度测试未生效基本确定是窗体系统未创建深度缓存).在OpenGL扩展中,GL_EXT_framebuffer_object扩展提供了一个创建额外帧缓存对象(FBO)的接口。这个帧缓存的创建和控制完全是由OpenGL完成的,有别于窗体系统创建的默认的帧缓存。与系统默认的帧缓存类似,一个FBO也是颜色缓存、深度缓存、模板缓存的集合(FBO不包括累积缓存),然后OpenGL程序就可以把渲染重定向到FBO中. - demo测试成功
-
简单模型测试成功
-
obj自车模型测试成功