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

文章探讨了自车模型在本地渲染成功但在MDC上出现贴图问题的原因,定位为顶点或深度缓冲问题。经过一系列测试,发现MDC上的QOpenGLWindow默认未开启深度测试,最终通过使用FBO实现深度缓存解决了问题。
摘要由CSDN通过智能技术生成

现象:

自车模型本地渲染成功, 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自车模型测试成功
    在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值