XNA 消锯齿
来源:互联网 发布:网络零售 编辑:程序博客网 时间:2024/04/29 06:56
这一阵子写程序,被人批评,这么大的锯齿。感觉很不爽,哎。
查了查,XNA是有个可以消锯齿的方法的。在XNA3.1的帮助里有关于消锯齿的一个范例
自己后来搜集了一些原理 参见这篇http://blog.csdn.net/xuehuic/article/details/5804213
相关内容 :
(1)what is antialiasing?
Antialiasing is the process of softening hard edges in an image so that polygons appear less jagged.
Antialiasing is normally accomplished by multisampling, which means you use more than one pixel ("sample") from an image to determine the color of a pixel in your final image. The more samples per pixel, the smoother the resulting image.
Both PC and Xbox 360 platforms support Full Screen Antialiasing (FSAA) modes, where extra pixels are rendered to a render target and used as samples to create an antialiased final image. 4x FSAA uses four samples per pixel by rendering the scene to a render target with twice the height and width of the backbuffer. It uses the extra samples in the render target to create an antialiased final image. 2x FSAA is also common on PCs and supported by the Xbox 360.
Use the CheckDeviceMultiSampleType method to query for antialiasing support on your game machine. Also, use theMultiSampleQuality and MultiSampleType properties of thePresentationParameters to select an antialiasing mode for your backbuffer. For more information, seeHow To: Enable Antialiasing (Multisampling). You can set PreferMultiSampling on the GraphicsDeviceManager to true to let theGraphicsDeviceManager choose the antialiasing mode.
You can use the RenderState property MultiSampleAntiAlias to enable or disable multisampling at run time.
( 2)How To: Enable Antialiasing (Multisampling)
Demonstrates how to use the GraphicsDeviceManager to enable antialiasing for your game. TheCheckDeviceMultiSampleType method determines what kind of antialiasing your game computer supports.
Antialiasing is the process of smoothing the edges of triangles by averaging neighboring pixels in a render target. Because this process samples multiple pixels, it is also known as multisampling.
The Complete Sample
The code in this topic shows you the technique. You can download a complete code sample for this topic, including full source code and any additional supporting files required by the sample.
Download AntiAliasing_Sample.zip.
Using Antialiasing
To enable antialiasing in your game
Set PreferMultiSampling to true in yourGame class constructor.
This will default to MultiSampleType.TwoSamples on Xbox 360 (2x antialiasing). On a PC, theGraphicsDeviceManager will query forMultiSampleType.NonMaskable, and select that, if possible. Otherwise, it will choose the best available antialiasing.
C# graphics.PreferMultiSampling = true;
To customize antialiasing in your game
In your Game class constructor, add an event handler to thePreparingDeviceSettings event on yourGraphicsDeviceManager.
If PreferMultiSampling is true, aMultiSampleType will be chosen automatically before the event is raised. Whether or not aMultiSampleType is chosen when the event is raised, you can use the event handler to query and choose your ownMultiSampleType.
C# public Game1(){ graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; graphics.PreferMultiSampling = true; graphics.PreparingDeviceSettings += new EventHandler<PreparingDeviceSettingsEventArgs>( graphics_PreparingDeviceSettings);}
Create a method to use as an event handler for thePreparingDeviceSettings event.
You will be using the PreparingDeviceSettingsEventArgs instance to access thePresentationParameters and set your antialiasing preferences.
C# void graphics_PreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e){
If your game is running on Xbox 360, set directly theMultiSampleQuality andMultiSampleType properties, and then return from your event handler.
The Xbox supports MultiSampleType.TwoSamples andMultiSampleType.FourSamples, each with aMultiSampleQuality of 0 or 1.MultiSampleType.FourSamples is 4x antialiasing;MultiSampleType.TwoSamples is 2x antialiasing.
C# // Xbox 360 and most PCs support FourSamples/0 // (4x) and TwoSamples/0 (2x) antialiasing. PresentationParameters pp = e.GraphicsDeviceInformation.PresentationParameters;#if XBOX pp.MultiSampleQuality = 0; pp.MultiSampleType = MultiSampleType.FourSamples; return;#else
If your game is running on a PC, use CheckDeviceMultiSampleType to query for antialiasing support.
Many PCs support 4x antialiasing, and most will support 2x antialiasing. Once you have determined that antialiasing is supported, set theMultiSampleType andMultiSampleQuality properties appropriately, and then return from the event handler.
C# int quality = 0; GraphicsAdapter adapter = e.GraphicsDeviceInformation.Adapter; SurfaceFormat format = adapter.CurrentDisplayMode.Format; // Check for 4xAA if (adapter.CheckDeviceMultiSampleType(DeviceType.Hardware, format, false, MultiSampleType.FourSamples, out quality)) { // even if a greater quality is returned, we only want quality 0 pp.MultiSampleQuality = 0; pp.MultiSampleType = MultiSampleType.FourSamples; } // Check for 2xAA else if (adapter.CheckDeviceMultiSampleType(DeviceType.Hardware, format, false, MultiSampleType.TwoSamples, out quality)) { // even if a greater quality is returned, we only want quality 0 pp.MultiSampleQuality = 0; pp.MultiSampleType = MultiSampleType.TwoSamples; } return;#endif
}
(3)PresentationParameters.MultiSampleType PropertyGets or sets the multisample type.Namespace: Microsoft.Xna.Framework.Graphics
Assembly: Microsoft.Xna.Framework (in microsoft.xna.framework.dllC# public MultiSampleType MultiSampleType { get; set; }
Property Value
The multisample type. Must be MultiSampleType.None unlessSwapEffect has been set to SwapEffect.Discard. Multisampling is supported only ifSwapEffect is SwapEffect.Discard.(4)PresentationParameters.MultiSampleQuality PropertyGets or sets a value indicating the multisample quality level.Namespace: Microsoft.Xna.Framework.Graphics
Assembly: Microsoft.Xna.Framework (in microsoft.xna.framework.dll)C# public int MultiSampleQuality { get; set; }
Property Value
The multisample quality level. The valid range is from 0 to one less than the value returned byCheckDeviceMultiSampleType.Paired values of render targets or of depth-stencil surfaces and MultiSampleType must match.
其它相关内容不做赘述 ,附上范例的源代码此代码为Game1.cs中的代码:
不过我比较笨 ,最后用了一个超easy的方法,就是直接把图片做成羽化后的图片就可以了 O(∩_∩)O~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
隔了5个月后我再来看这个资料,补充一条。
当做测试时,如果出现找不到合适的图形卡,请检查设置参数是否正确,请检查shader版本等这些提示问题,应该是高估显卡的性能了。
一般显卡支持4X抗锯齿,质量从0-10不等,但一般选0就好了,就最好了。
然后模型上的锯齿还是很明显,目前还没有搞出来,等我搞出来再补上说明。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
好 隔了半个月,我搞清楚了为什么我的3D模型那么大的锯齿了,原因在于画法不一样,我一直是使用3D模型先画到一个贴图上,再画的贴图,也许3D和2D的抗锯齿效果是有些差别的,即使我全开了4X还是有很明显的锯齿,但是当我直接画3D模型的时候,啧啧,锯齿就小了很多,所有感悟:程序员要敢于打破自己的原有思路,才能有进步。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
好了又隔了一段时间,我又发现rendertarget实际上是有个抗锯齿重载的,汗颜。。。另外如果加了shader的话,要注意shader里面的内容是否有抗锯齿,或者加了锯齿的语句。
- XNA 消锯齿
- 锯齿
- 锯齿
- XNA
- XNA
- 锯齿与反锯齿
- 锯齿与抗锯齿
- XNA游戏:Hello XNA
- 问题十八:怎么对ray tracing图形进行消锯齿
- 锯齿数组
- unity 锯齿
- 锯齿数组
- 锯齿数组
- 抗锯齿
- 抗锯齿
- 抗锯齿
- 抗锯齿
- 抗锯齿
- PHP批量删除技巧
- 移动视频监控(2)---原型开发---Symbian客户端进展。
- C#的Timer解析
- 整理的Sybase Dbcc traceflags (2)
- vb.net开发中使用excel插件代码
- XNA 消锯齿
- Django的中文编码问题
- 浅议Visual Basic.NET中HOOK的应用
- 感激
- (转)DD牛的背包九讲
- iphone openGL/ES纹理读取
- 【资源收集】关于WINCE网卡开发的知识收集
- Boost.Python使用小结
- iphone UIImage常用方法