• osg如何设置抗锯齿(反走样,反锯齿)


    首先抗锯齿是什么?

    举个最简单的例子

    你用windows画图软件画一根直线(准确说这个叫做线段),当水平或者垂直的时候,如下图,这是绝对完美的

    但是
    当线段出现倾斜时,就无法做到完美了
    此时就会出现锯齿

    就如同台阶一样,一级一级的

    这是由于显示原理本身所限制的,也即是说因为显示器以及帧格式都是按照像素进行排列的,始终会存在一个最小单位。当线倾斜的时候,不做任何处理的时候,斜方向的最小单位就会出现空隙

    最简单也是统一的处理方式自然是用其他的内容填充这些缝隙,如下图所示

    右侧是不是看上去就比左侧要更加顺滑,舒服一些了呢?
    这就是抗锯齿最基本的原理

    至于现在所使用到的抗锯齿的方法,没必要在知乎专门介绍,外面的资料海一样多,你可以自己去查阅

    中文查询“抗锯齿”或者“反锯齿”
    英文查询“anti aliasing”

    文章来自:https://www.zhihu.com/question/28855427

    现在说在OSG里面如何设置:

    其实非常简单,就是在设置osg::GraphicsContext::Traits时,有个成员变量为sample,是采样倍数,默认是0的,你设置为8就可以了,如下:

        osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
        traits->x = 0;
        traits->y = 0;
        traits->width = width;
        traits->height = height;
    
        //支持窗口扩展,默认是不支持的
        traits->windowDecoration = true;
        //支持双缓存,默认不支持
        traits->doubleBuffer = true;
        traits->sharedContext = 0;
        traits->red = 8;
        traits->blue = 8;
        traits->green = 8;
        //支持alpha,默认不支持为0,这里改为支持,使截出来的图片具有alpha值
        traits->alpha = 8;
      //采样倍数 traits
    ->samples = 8; traits->sampleBuffers = 1; osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());

    然后把gc设置给camera就可以了。




  • 相关阅读:
    洛谷 P1022.计算器的改良
    洛谷 P1014.Cantor表
    洛谷 P1464.Function
    洛谷 P1426.小鱼会有危险吗
    洛谷 P2089.烤鸡
    洛谷 P1579.哥德巴赫猜想(升级版)
    洛谷 P1618.三连击(升级版)
    通过ES6写法去对Redux部分源码解读
    闲谈Hybrid
    浅谈React、Vue 部分异步
  • 原文地址:https://www.cnblogs.com/tangmiao/p/7831089.html
Copyright © 2020-2023  润新知