原文:去除WPF中3D图形的锯齿

理论上讲PC在计算3D图形的时候是无法避免不出现锯齿的,因为3D图形都是又若干个三角形组成,如果3D图形想平滑就必须建立多个三角形,你可以想象一下正5边形和正100边形哪个更接近圆形的道理一样,这样会大量消耗显卡的存储空间或是从内存共享的存储空间,导致程序的整体性能降低,但如果三角形很少,显卡的解析度毕竟有限,就会出现锯齿。最常见的处理方式在我们玩的3D游戏里都可以见到,就是所谓的反锯齿功能。反锯齿功能(反锯齿加速齿轮)的作用是为了让游戏画面中的棱角更平滑更圆润。而在游戏画面中的3D游戏里面的反锯齿选项中会有2X 4X 6X等是指你想开启几个反锯齿加速齿轮管线,开的越多画面越平滑圆润,效果也就越好。但是它是以显卡的显存资源的使用成正比的,如果游戏内存资源的使用率高出了显存或内存的极限,一般会导致游戏弹出或死机的发生。

我们知道WPF中的图形呈现都是通过显卡的GPU来进行计算处理的,所以改变显卡的3D平滑处理设置也可以消除锯齿(比如设置为8X),但你会发现其他的问题又会出现,不仅程序运行变慢甚至视频播放不了等。既然WPF诞生的时候已经强调了WPF不必关心显卡的问题,因为通过使用软件计算而不依赖显卡提供的内在支持,WPF可以执行任何渲染操作,那么应该可以通过程序来去除锯齿,所以就不要打硬件的主意了。

在程序中实现3D效果的时候,接触最多的就是Viewport3D了,它是用来为三维可视内容提供呈现图面的,这个类的一个属性叫做3D Antialiasing,意思就是去除3D锯齿,边缘模式的预设值是Unspecified,先看看效果:

你会发现微小的锯齿仍然存在,消除锯齿不是很明显,还有一点不能容忍的是,一旦3D Antialiasing设置为Unspecified,系统就是多重取样,整个程序就会卡,直接影响的是呈现速度,所以为了保证程序的流畅度,我们需要把3D Antialiasing的值设置为Aliased,就是将非文本(始终通过反失真效果来显示文本对象,设置边缘模式值不会对其产生影响)绘图基元的边缘呈现为锯齿形边缘,这样就不会影响呈现速度,设置方法如下

XAML: <Viewport3D x:Name="myVisual" RenderOptions.EdgeMode="Aliased">
C#:RenderOptions.SetEdgeMode((DependencyObject)myVisual, EdgeMode.Aliased);

然后再看看效果:

观察一下会发现,和开启了消除锯齿功能的效果没什么区别,只是程序不卡了,而且消除锯齿的功能只有在Vista和Windows7中才好用,对XP并不支持,可见
3D Antialiasing的方法仍然解决不了问题。

说句公道话,上面的效果中那点锯齿其实很微不足道,你要是用过iphone或itunes,很多App中也存在这样的锯齿,但这微小的瑕疵是可以容忍的,你在去看看那些大型的3D游戏,锯齿随处可见。尽管可以容忍但在WPF中仍有好方法可以去掉锯齿的,方法非常简单,没有做不到,只有想不到。

既然产生锯齿的位置都在边缘(Edge),解决方法就在边缘上,我们可以用Border实例作为3D模型的父容器,并把BorderBrush设置为Transparent,BorderThickness为2~3,这样边缘部分就变透明了,锯齿也不见了,效果如下:

去除WPF中3D图形的锯齿的更多相关文章

  1. WPF中3D旋转的实现

    原文:WPF中3D旋转的实现 关于3D旋转的原理,请看Daniel Lehenbauer的文章 <Rotating the Camera with the Mouse> http://vi ...

  2. WPF 中Canvas图形移动、缩放代码

    从Flash转C#,很多内容一知半解,边摸索边前进,代码粗糙,权当留个脚印. 只是想得到一个基础的移动和缩放功能的界面,找了很久都是画线.画矩形等基础形状的代码,移动和缩放说的并不清晰,只能自己努力来 ...

  3. 在WPF中绘制多维数据集

    原文 https://stuff.seans.com/2008/08/13/drawing-a-cube-in-wpf/ 是时候使用WPF绘制一个简单的3D对象了.作为WPF中3D图形的快速介绍,让我 ...

  4. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  5. WPF中图形表示语法详解(Path之Data属性语法)ZZ

    大可山 [MSN:a3news(AT)hotmail.com] http://www.zpxp.com 萝卜鼠在线图形图像处理 ------------------------------------ ...

  6. WPF中图形表示语法详解(Path之Data属性语法)

    原文 http://blog.csdn.net/johnsuna/article/details/1885597 老规矩,看图说话. 先看显示效果:(图1) XAML(代码A):<Page xm ...

  7. WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能

    原文:WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能       对于CAD图形来说,3D旋转比较常用,具体实现方法在上篇文章<WPF中3D旋转的实现 >中做了 ...

  8. WPF中制作立体效果的文字或LOGO图形

    原文:WPF中制作立体效果的文字或LOGO图形 较久之前,我曾写过一篇:"WPF绘制党徽(立体效果,Cool) "的博文.有感兴趣的朋友来EMAIL问是怎么制作的?本文解决此类问题 ...

  9. WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化

    原文:WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化 注:最近在做3D机械模型重建方面的软件,需要根据光栅传感器采集的数据绘制3D图形,并显示出色差以及 ...

随机推荐

  1. storm集群操作指南

    目录 storm集群操作指南 一.storm伪分布式安装 (一)环境准备 (二)安装zookeeper (三)安装storm (四)运行程序 二.storm集群安装 (一)下载storm并解压 (二) ...

  2. workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的)

    workerman-chat(PHP开发的基于Websocket协议的聊天室框架)(thinkphp也是支持socket聊天的) 一.总结 1.下面链接里面还有一个来聊的php聊天室源码可以学习 2. ...

  3. get_mysql_conn_info.py

    #!/usr/bin/env python#-*- encoding: utf8 -*- import xlrd """此模块作用:从excel文件获取数据库连接信息,第 ...

  4. Windows10终端优化方案:Ubuntu子系统+cmder+oh-my-zsh

    原问地址:https://zhuanlan.zhihu.com/p/34152045 最近从MacBook换到了种草已久的Surface Book 2,而我的工作环境也自然要从macOS换到Windo ...

  5. 学习金字塔 分类: T_TALENT 2014-05-21 09:25 331人阅读 评论(0) 收藏

    学习金字塔是美国缅因州的国家训练实验室研究成果,它用数字形式形象显示了:采用不同的学习方式,学习者在两周以后还能记住内容(平均学习保持率)的多少.它是一种现代学习方式的理论.最早它是由美国学者.著名的 ...

  6. 字符串函数(strcpy字符串拷,strcmp字符串比较,strstr字符串查找,strDelChar字符串删除字符,strrev字符串反序,memmove拷贝内存块,strlen字符串长度)

    1.strcpy字符串拷贝拷贝pStrSource到pStrDest,并返回pStrDest地址(源和目标位置重叠情况除外) char *strcpy(char *pStrDest, const ch ...

  7. GLPI-开源资产管理软件

    https://github.com/glpi-project/glpi/releases/tag/9.2.3 http://glpi-project.org/downloads/ 开源资产管理软件- ...

  8. 【u245】机房病毒

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 我们机房中了病毒,因此几乎什么都无法正常进入.为了解决这个病毒,我们花了好几天.终于在大家的共同努力下 ...

  9. Centos6.5 VNC 配置

    VNC 配置 本教程配置说明 目的:实现Window下VNC登陆Linux服务器 本机是在root用户下操作完毕 两台主机已实现基本网络配置,且相互ping通 1. 检查图形界面 确保服务器端须要执行 ...

  10. 1069. The Black Hole of Numbers (20)【模拟】——PAT (Advanced Level) Practise

    题目信息 1069. The Black Hole of Numbers (20) 时间限制100 ms 内存限制65536 kB 代码长度限制16000 B For any 4-digit inte ...