贴图问题,opengl,linux,windows,消除锯齿,摩尔纹,yuv 还是 rgb

1 消除锯齿和摩尔纹

windows下使用d3d是很方便的,基本不用设置很多东西,就可以做到,所以windows上最好使用d3d。但是linux上有所不同。

摩尔条纹是两条线或两个物体之间以恒定的角度和频率发生干涉的视觉结果,而锯齿是在缩小的情况下,画面计算引起,这两个事物都必须消除。

使用opengl 在linux 上做opengl 和 windows上有所不同吗,事实上,是这样的,我们在渲染的时候,如何做到反锯齿,反摩尔纹,其实都是要了解和掌握最基础的底层相应的知识体系,才能做到比较好的状态,监控贴图也是一个麻烦的事情,特别注意的是画面缩小的情况,如果我们熟悉ffmpeg,就知道ffmpeg在缩小算法上做得很好,可以消除很多锯齿和摩尔纹。
请看下面这幅图:正好是同向的方块和线条组成,这种情况锯齿更加严重。
贴图问题,opengl,linux,windows,消除锯齿,摩尔纹,yuv 还是 rgb_第1张图片
这个很恶劣,主要是锯齿和摩尔效应对眼睛的刺激比较大,这样除了让普通的观察者感到无法接受,最重要的是图像会产生误差,下面使用mipmap去过滤图像

贴图问题,opengl,linux,windows,消除锯齿,摩尔纹,yuv 还是 rgb_第2张图片
发现好了一点,并不是非常好
下面使用mipmap和各项异性过滤,会更好一点

贴图问题,opengl,linux,windows,消除锯齿,摩尔纹,yuv 还是 rgb_第3张图片
使用linear 和mipmap 与各项异性过滤
贴图问题,opengl,linux,windows,消除锯齿,摩尔纹,yuv 还是 rgb_第4张图片
达到效果!

linux 和windows的不同之处以及linux的问题

知识讲完,难道linux和windows下真的有所不同?那么答案在这里:代码是一样的,不一样的是驱动,linux下开源驱动,闭源驱动,opengl版本不同,还有半闭源驱动,以及nvidia下是否安装cuda,最终影响画面的总共有以下几点:
1 画面分辨率
2 如果是远程画面还有码率问题
3 opengl 版本
4 驱动
5 a卡的驱动和n卡驱动不同
6 cuda 问题
7 linux下bug问题(大都是国产操作系统,不言明了)

我举个例子,我们选取RGBA32 和RGB24 和 yuv420 去贴图的时候,应该选取哪一个?

这个问题比较麻烦,但不复杂,说亮点:
分辨率不同,选取RGB32 和 yuv 应该不同
驱动不同,选取RGB32 和 yuv 不同
opengl版本不同,选取不同,
显卡不同,选取不同
那么综合以上所述,应该选取哪一样比较合适,这个实际上要经过许多测试的,在windows上,不用担心这类问题,因为驱动肯定是合适的,接下去就是选取opengl 的版本,当然使用vulkan 是另外一回事,所以windows上我们可以这么做:

windows
小分辨率: 使用RGB32,为什么不使用RGB24,虽然RGB24的数据量更小,不过大部分显卡是为了游戏而生,所使用的颜色对齐一致为RGBA,所以反而效率要高
大分辨率:使用yuv420,数据量过了瓶颈,yuv420的数据量小很多,效率反而高了

linux :
不知道怎么做:选取RGB32, 放大缩小使用linear 过滤
知道怎么做: 选取两种方式,用户可以修改方式,放大缩小使用linear 和mipmap
知道自己使用的是纯的闭源驱动,是配置的专家,使用yuv420 和 硬件解码结合,使用linear 和mipmap过滤和各项异性过滤。

以上只是建议,肯定有更好的方式。

比如windows不使用opengl,使用direct3d是更好的,使用d3d11 就好了,如果有兴趣,当然可以使用dx12,考虑的是兼容问题,那就直接使用d3d。

你可能感兴趣的:(c++高级技巧,音视频和c++,java,物联网,ffmpeg,linux,运维,服务器)