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就可以了。




  • 相关阅读:
    HDOJ 1846 Brave Game
    并查集模板
    HDU 2102 A计划
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    POJ 1321 棋盘问题
    CF 999 C.Alphabetic Removals
    CF 999 B. Reversing Encryption
    string的基础用法
    51nod 1267 4个数和为0
  • 原文地址:https://www.cnblogs.com/tangmiao/p/7831089.html
Copyright © 2011-2022 走看看