OpenTK学习笔记——多重采样抗锯齿

OpenTK抗锯齿

如果不进行抗锯齿的操作,OpenTK绘制的图是很粗糙的。而实际上OpenTK默认采用了抗锯齿,但在没有缓冲区的情况下,抗锯齿功能无法实现。下面的代码用来开启抗锯齿,虽说是默认的,为了保险也可以写一下,代码如下:

GL.Enable(EnableCap.LineSmooth);
GL.Hint(HintTarget.LineSmoothHint, HintMode.Nicest);
GL.Enable(EnableCap.PointSmooth);
GL.Hint(HintTarget.PointSmoothHint, HintMode.Nicest);

申请缓冲区的两种方法

第一种方法,对GLControl类进行继承。

public class GLControl1
: GLControl
{
	public GLControl1()
	: base(new GraphicsMode(32, 24, 8, 8))
	{ }    
}

在InitializeComponent函数中,找到:

this.glControl1 = new OpenTK.GLControl();

修改为:

this.glControl1 = new GLControl1();

这个方法参考自:https://stackoom.com/question/40pRq中的回答
链接中是在创建窗口时创建缓冲区,但有时我们需要在GLControl上进行画图,因此可以采用本文的方法,在创建GLControl控件时申请缓冲区。

第二种方法,在创建实例时申请缓冲区

this.glControl1 = new OpenTK.GLControl(new GraphicsMode(32, 24, 8, 8));

这个方法更加简单。
这两种方法都会带来一个问题,就是在设计界面会报错,但是不影响运行。建议在设计界面构造完后再添加申请缓冲区的代码。
在这里插入图片描述

抗锯齿的前后变化

抗锯齿前
抗锯齿前
抗锯齿前

抗锯齿后
抗锯齿开启后
抗锯齿后

吐槽

之前就是想实现类似matlab的mesh功能,已经用C#的Graphics画出来并且能够实现交互式的旋转。
在这里插入图片描述
在这里插入图片描述
但是发现三维空间中的遮盖问题太难处理,这才准备用OpenGL来处理。没想到OpenTK这玩意资料也太少了,这个抗锯齿的问题困扰了好久,一直找不到合适的资料。OpenTK感觉是配置起来最简单的,没想到后续的学习成本这么大。
学到这里,做个记录,希望能够帮助到大家。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值