MDC平台使用QT渲染3D模型问题及解决方案

现象:

自车模型本地渲染成功, MDC上无贴图
在这里插入图片描述

使用引用方式加载贴图, 贴图有了, 但部分贴图不对
在这里插入图片描述

问题定位

看起来是画mesh的时候就不对, 深度测试是开启的
车体模型太复杂, 使用较简单的模型测试:
简单模型本地渲染与MDC渲染对比:在这里插入图片描述ng在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

仔细比对后发现没有纹理时的网格就不对,
在这里插入图片描述
在这里插入图片描述

加载图片前使图片翻转可以验证不是纹理贴图的问题
在这里插入图片描述

在这里插入图片描述

问题定位: 基本确定是顶点或深度缓冲的问题
顶点问题: 将mesh构造函数里的数据打印与本地打印的数据对比, 完全一样
深度缓冲: 使用深度缓冲后, 效果并未改善
在这里插入图片描述

关闭光照, 减少影响因素
在这里插入图片描述

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

在这里插入图片描述

至此可以看出模型各模块间融合的不好, 且深度缓冲未生效, opengl代码中已加入深度缓冲代码, openglwindow可能未开启深度缓冲? 本地关闭深度缓冲与MDC对比
在这里插入图片描述

在这里插入图片描述

忽略动画可看出本地与MDC上结果是一样的,
结论: 问题产生原因是MDC上QOpenGLWindow不会默认打开深度测试

  1. 寻找QOpenGLWindow打开深度缓存的接口 - 失败
  2. 使用Face culling的方式替代深度缓冲 - 失败
    在这里插入图片描述

在这里插入图片描述

  1. 使用FBO实现深度测试 – demo测试成功
    默认情况下, OpenGL使用的帧缓存是由窗体系统创建和管理的(MDC深度测试未生效基本确定是窗体系统未创建深度缓存).在OpenGL扩展中,GL_EXT_framebuffer_object扩展提供了一个创建额外帧缓存对象(FBO)的接口。这个帧缓存的创建和控制完全是由OpenGL完成的,有别于窗体系统创建的默认的帧缓存。与系统默认的帧缓存类似,一个FBO也是颜色缓存、深度缓存、模板缓存的集合(FBO不包括累积缓存),然后OpenGL程序就可以把渲染重定向到FBO中.
  2. demo测试成功
    在这里插入图片描述

在这里插入图片描述

  1. 简单模型测试成功
    在这里插入图片描述
    在这里插入图片描述

  2. obj自车模型测试成功
    在这里插入图片描述
    在这里插入图片描述

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值