精华内容
下载资源
问答
  • OpenGL实现抗锯齿效果

    千次阅读 2016-12-21 15:51:02
    OpenGL实现抗锯齿效果

    OpenGL实现抗锯齿效果

    首先创建普通FBO,再创建一个MSAAFBO,将要描画物描画在MSAAFBO上,然后将MSAAFBO的颜色copy到普通FBO上,最后将普通FBO呈现在屏幕。

     

    1、创建普通BFO

    glGenTextures(1, &textureId);

    glBindTexture(GL_TEXTURE_2D, textureId);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, TEXTURE_WIDTH, TEXTURE_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);

    glBindTexture(GL_TEXTURE_2D, 0);

     

    GLuint rboId;

    glGenRenderbuffers(1, &rboId);

    glBindRenderbuffer(GL_RENDERBUFFER, rboId);

    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, TEXTURE_WIDTH, TEXTURE_HEIGHT);

    glBindRenderbuffer(GL_RENDERBUFFER_EXT, 0);

     

    GLuint fboId;

    glGenFramebuffers(1, &fboId);

    glBindFramebuffer(GL_FRAMEBUFFER, fboId);

    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboId);

    glBindFramebuffer(GL_FRAMEBUFFER, 0);

     

     

    创建MSAABFO

    glGenFramebuffers(1, &mMSAAFramebuffer);

    glBindFramebuffer(GL_FRAMEBUFFER, mMSAAFramebuffer);

    glGenRenderbuffers(1, &mMSAARenderbuffer);

    glBindRenderbuffer(GL_RENDERBUFFER, mMSAARenderbuffer);

    glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, mBackingWidth, mBackingHeight);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, mMSAARenderbuffer);

    glGenRenderbuffers(1, &mMSAADepthRenderbuffer);

    glBindRenderbuffer(GL_RENDERBUFFER, mMSAADepthRenderbuffer);

    glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT16, Width, Height);

    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mMSAADepthRenderbuffer);

    glBindFramebuffer(GL_FRAMEBUFFER, 0);

     

    拷贝MSAAFBO到普通FBO

    glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fboId);

    glBindFramebuffer(GL_READ_FRAMEBUFFER, mMSAAFramebuffer);

    glBindFramebuffer(GL_FRAMEBUFFER, 0);

    glInvalidateFramebuffer(GL_READ_FRAMEBUFFER, 1, (GLenum[]){GL_DEPTH_ATTACHMENT});

    glBlitFramebuffer(0, 0, Width, Height, 0, 0, Width, Height, GL_COLOR_BUFFER_BIT, GL_NEAREST);

    glInvalidateFramebuffer(GL_READ_FRAMEBUFFER, 1, (GLenum[]){GL_COLOR_ATTACHMENT0});

    展开全文
  • android 抗锯齿效果

    2013-11-05 11:53:15
    android 抗锯齿效果【转】  2011-03-13 15:48:56| 分类: Android学习|字号 订阅  在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。  ...

    android 抗锯齿效果【转】  

    2011-03-13 15:48:56|  分类: Android学习|字号 订阅

       在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。
        方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法。

    Java代码  收藏代码
    1. paint.setAntiAlias(true);  

     


        方法二:给Canvas加上抗锯齿标志。
    有些地方不能用paint的,就直接给canvas加抗锯齿,更方便。

    Java代码  收藏代码
    1. canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));  

     

          测试代码如下:

    Java代码  收藏代码
    1. import android.content.Context;  
    2. import android.graphics.Bitmap;  
    3. import android.graphics.BitmapFactory;  
    4. import android.graphics.Canvas;  
    5. import android.graphics.Matrix;  
    6. import android.graphics.Paint;  
    7. import android.graphics.PaintFlagsDrawFilter;  
    8. import android.view.View;  
    9.   
    10. public class MyView extends View {  
    11.     private PaintFlagsDrawFilter pfd;  
    12.     private Paint mPaint = new Paint();  
    13.     private Matrix matrix = new Matrix();;  
    14.     private Bitmap bmp;  
    15.   
    16.     public MyView(Context context) {  
    17.         super(context);  
    18.         initialize();  
    19.     }  
    20.   
    21.     private void initialize() {  
    22.         pfd = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);        
    23.         mPaint.setAntiAlias(true);  
    24.         matrix.setRotate(30);  
    25.         matrix.postScale(0.5f, 0.5f);  
    26.         bmp = BitmapFactory.decodeResource(getResources(), R.drawable.show);  
    27.     }  
    28.       
    29.     @Override  
    30.     public void dispatchDraw(Canvas canvas) {  
    31.         canvas.translate(1000);  
    32.         canvas.drawBitmap(bmp, matrix, null);  
    33.         canvas.translate(0250);  
    34.         canvas.drawBitmap(bmp, matrix, mPaint);  
    35.         canvas.setDrawFilter(pfd);  
    36.         canvas.translate(0250);  
    37.         canvas.drawBitmap(bmp, matrix, null);  
    38.     }  
    39. }  
     

        下图是效果:

     

          可以看出,两种方式都挺有效的。

    展开全文
  • 将 myaa.m 添加到您的路径中,并随时在 Matlab 中享受具有专业外观的抗锯齿图形。 Myaa 可以处理任何类型的图形(3-D、绘图、散点图等),甚至可以为文本、ui 控件和网格添加抗锯齿功能。 Myaa 非常适合复杂、杂乱和...
  • pyqtgraph 在Opengl模式下开启抗锯齿效果 修改pyqtgraph源码文件pyqtgraph/widgets/GraphicsView.py def useOpenGL(self, b=True): if b: if not HAVE_OPENGL: raise Exception("Requested to use OpenGL ...

    pyqtgraph 在Opengl模式下开启抗锯齿效果

    修改pyqtgraph源码文件pyqtgraph/widgets/GraphicsView.py

     

        def useOpenGL(self, b=True):
            if b:
                if not HAVE_OPENGL:
                    raise Exception("Requested to use OpenGL with QGraphicsView, but QtOpenGL module is not available.")
                from PyQt5.QtWidgets import QOpenGLWidget
                from PyQt5.QtGui import QSurfaceFormat, QPainter
                v = QtOpenGL.QGLWidget()
                v=QOpenGLWidget()
                fmt=QSurfaceFormat()
                fmt.setSamples(8)
                v.setFormat(fmt)
                self.setRenderHint(QPainter.Antialiasing)
            else:
                v = QtGui.QWidget()
                
            self.setViewport(v)

     

    展开全文
  • 用C++类继承...这样也可以实现圆形头像的效果,不需要用qml中的蒙板,而且抗锯齿效果更好。 circleHead.h #ifndef CIRCLEHEAD_H #define CIRCLEHEAD_H #include <QtQuick/QQuickPaintedItem> #in...

    qml圆形头像(一)—— 使用蒙板
    https://blog.csdn.net/hp_cpp/article/details/91379356
    这篇用qml实现了圆形头像的效果,但是锯齿较为严重。

    用C++类继承QQuickPaintedItem,然后重写void paint(QPainter *painter);
    这样也可以实现圆形头像的效果,不需要用qml中的蒙板,而且抗锯齿效果更好。
    circleHead.h

    #ifndef CIRCLEHEAD_H
    #define CIRCLEHEAD_H
    
    #include <QtQuick/QQuickPaintedItem>
    #include <QColor>
    
    class CircleHead : public QQuickPaintedItem // 为了基于QPainter API实现自定义的绘制效果,我们需要继承这个类。如果不需要使用QPainter API,我们可以继承QQuickItem,甚至如果连可视化也不需要,QObject以及它的子类都可以作为我们继承的对象
    {
        Q_OBJECT                              // 因为需要使用到Qt的元对象系统
        Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged)
    
    public:
        CircleHead(QQuickItem *parent = nullptr);  // 作为可视化组件我们需要将其父对象设置为QQuickItem
        QString source() const;
        void setSource(const QString &source);
    
        void paint(QPainter *painter);         // 最后我们重载QQuickPaintedItem的paint函数,实现我们的自定义绘图
    
    signals:
        void sourceChanged();
    
    private:
        QString m_source;
    };
    
    #endif
    

    circleHead.cpp:

    #include "circleHead.h"
    #include <QPainter>
    #include <QDebug>
    
    CircleHead::CircleHead(QQuickItem *parent)
        : QQuickPaintedItem(parent)
    {
        m_source = QString();
    }
    
    QString CircleHead::source() const
    {
        return m_source;
    }
    
    void CircleHead::setSource(const QString &source)
    {
        m_source = source;
        emit sourceChanged();
    }
    
    void CircleHead::paint(QPainter *painter)
    {
        painter->save();
        painter->setRenderHints(QPainter::Antialiasing, true);
        QPixmap pixmap(m_source);
    
        QPainterPath path;
        path.addEllipse(0, 0, width(), height());
        painter->setClipPath(path);
    
        painter->drawPixmap(QRect(0, 0, static_cast<int>(width()), static_cast<int>(height())), pixmap);
    
        painter->restore();
    }
    
    

    main.cpp

    #include <QtQuick/QQuickView>
    #include <QGuiApplication>
    #include "circleHead.h"
    
    int main(int argc, char *argv[])
    {
        QGuiApplication app(argc, argv);
    
        qmlRegisterType<CircleHead>("CircleHead", 1, 0, "CircleHead"); 
        QQuickView view;                                  			// 然后创建一个QQuickView来显示QML组件
        view.setResizeMode(QQuickView::SizeRootObjectToView);      // 窗口大小设置为根目录大小
        view.setSource(QUrl("qrc:///main.qml"));                   // 调用资源中的app.qml
        view.show();
        return app.exec();
    }
    

    main.qml

    import QtQuick 2.0
    import CircleHead 1.0
    
    Item {
        width: 400; height: 400
    
        CircleHead {                 // 接着我们就可以使用"PieChart"这个类型
            id: aPieChart
    //        x: 120
    //        y: 120
            anchors.centerIn: parent
            width: 300;
            height: 300
            source: ":/images/cat.jpg"
        }
    }
    
    

    效果:
    在这里插入图片描述
    没有感觉到明显锯齿,果然比qml中的遮罩实现的效果好。
    参考:
    https://blog.csdn.net/yu253/article/details/78165511
    https://blog.csdn.net/cloud_castle/article/details/36873203
    https://blog.csdn.net/wanghualin033/article/details/78704274(使用QWidget画圆环图的几种方法)

    展开全文
  • 本篇重点介绍Cairo绘图引擎,Qt自带的QPainter的绘图效率和抗锯齿效果都没有cairo的好。 Cairo:C编写的开源绘图引擎(基于LGPL协议),大名鼎鼎的FireFox就是用这个绘图引擎的。Cairo是非常流行的开源2D图形渲染...
  • <div><p>该提问来源于开源项目:LiXizhi/NPLRuntime</p></div>
  • 因为WPF使用的是设备无关像素,一些GUI控件会因为抗锯齿效果而出现显示模糊的现象。 下面图片的例子中,同样宽度为1的竖线显示并不一样。 你可以通过设置UIElement 的SnapsToDevicePixels 属性值为true 来消除...
  •  方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法。 Java代码  paint.setAntiAlias(true);     方法二:给Canvas加上抗锯齿标志。 有些地方不能
  • android paint的抗锯齿效果

    万次阅读 2015-07-13 19:46:31
    前几天在做公司需求的时候用到自定义textview的功能。...功能完成之后看了下效果,发现用textview设置的字体跟draw出来的字体有些不同, 上面的是用textview直接设置的字体,下面是用draw显示的
  • 关于抗锯齿效果与硬件加速的关系

    千次阅读 2016-06-01 15:42:12
    只有android:hardwareAccelerated="false" ,即硬件加速关闭。 mPaint.setAntiAlias的方法才会生效。  mPaint.setAntiAlias(false); //有锯齿效果  mPaint.setAntiAlias(true); //无锯齿效果
  • 废话不多上代码 C# (肯定是绑定在摄像机上面的,你懂的;注意摄像机一定要是Skybox或者SolidColor模式) using System; using System.Collections.Generic; using UnityEngine; ...public class Antialiasing : ...
  • 很多时候需要把相机得texture渲染到texture上。但是效果往往不理想。 如图对比: 没有处理过得效果 处理过得效果 ...
  • 下图是用OpenGL反走样实现的图像抗锯齿效果图: [img=https://img-bbs.csdn.net/upload/201510/08/1444308583_347173.jpg][/img] 放大图: [img=https://img-bbs.csdn.net/upload/201510/08/1444309594_28937.png...
  •  方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法。 Java代码  paint.setAntiAlias(true);     方法二:给Canvas加上抗锯齿标志。 有些地方不能用p
  • 我的回答来自这个链接,也许它会帮助别人.http://www.html5rocks.com/en/tutorials/canvas/hidpi/重要的代码如下.// finally query the various pixel ratiosdevicePixelRatio = window.devicePixelRatio || 1,...
  • 你在WPF中设置GUI控件位置和大小使用的是设备无关像素(关于设备无关像素可以看我之前...WPF就在渲染界面控件的时候使用了抗锯齿的方法,比如,某个元素的边界正好卡在半个物理像素的地方,那么这个像素将会按照原来一
  • 移动端canvas抗锯齿

    2019-10-06 04:48:19
    抗锯齿效果图: 加入抗锯齿代码效果: var Game = function(){ var H = document.documentElement.clientHeight || document.body.clientHeight; var W = document.documentElement.clientW...
  • 抗锯齿

    2019-02-21 14:13:12
    常见抗锯齿及介绍 普及一下抗锯齿 抗锯齿技术这么多种,怎么选可以既画质好又跑得快 请问FXAA、FSAA与MSAA有什么区别?效果和性能上哪个好? OpenGL中一种高效的线段反走样技术 抗锯齿技术深度解析...
  • android TextView 文本抗锯齿UI效果

    千次阅读 2013-10-09 11:09:44
    一.2d绘图 除了这两种抗锯齿    1. paint.setAntiAlias(true); 2. canvas.setDrawFilter(new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG)); 是否还有其他的方法呢 因为还是有锯齿...
  • 全屏抗锯齿

    2012-02-29 17:15:21
    全屏抗锯齿和景深效果演示 演示如何实现全屏抗锯齿和景深效果. A键 - 开始全屏抗锯齿 D键 - 开始景深效果 UP键 - 增加摄相机的焦距 N键 - 不要任何效果 DOWN键 - 减小摄相机的焦距
  • cocos2dx抗锯齿问题

    千次阅读 2016-04-14 22:57:13
    抗锯齿效果: 打开抗锯齿效果如下: 这种效果就能满足要求了。 那么,是怎么做到的呢,其实很简单在glDrawArrays(GL_TRIANGLES, 0, count);语句之前加入glEnable(GL_POLYGON_SMOOTH);就可以了,但是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 607
精华内容 242
关键字:

抗锯齿效果