zoukankan      html  css  js  c++  java
  • 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就可以了。




  • 相关阅读:
    看了陈安之的文字 无论怎样 都要记住的是 你仍然是你自己 改变是应用他人的方法提高自己 改变是做更优秀更独特的自己
    流行的Ajax应用演示和源码下载(转)
    WEB2.0概念诠释(根据网络资料归纳)之一
    ASP.NET中文件上传下载方法集合(较为详细的介绍 转)
    建立梦想清单
    Ajax的应用
    Ajax的问题
    WEB2.0概念诠释(根据网络资料归纳)之三
    IIS突然挂掉
    VS2008软件90天过期,解决升级问题。
  • 原文地址:https://www.cnblogs.com/tangmiao/p/7831089.html
Copyright © 2011-2022 走看看