如何在XNA中指定光栅操作?

我正在寻找一种方法来使用特定的逻辑操作(如异或)添加一个精灵。 我无法在Google上find任何内容,但我不确定在文档中查找的位置。

我已经研究了SpriteBatch.Begin(...)及其Draw方法和GraphicsDevice类中的几个选项,但是我没有认识到任何能做到这一点的东西。 我对XNA还是比较陌生的,所以我可能只是没有认识到这个术语。

GraphicsDevice.RasterizerState属性是您如何更改栅格设置。

有三种默认状态,但我不相信RasterizerState是你正在寻找的。

 RasterizerState.CullCounterClockwise RasterizerState.CullClockwise RasterizerState.CullNone 

我不确定xor sprites是什么意思。 不过,从下面的评论我假设你想要使用覆盖十字准线。 如果你想使用叠加,你可以像Jonathan Dickinson指出的那样使用BlendState 。

除了工具栏中的另一个工具之外,我正在研究如何制作十字瞄准器。 倒十字准线(以我的经验/意见)是最好的十字准线

在这里输入图像描述

只需将SpriteBatch.Begin()中的BlendState设置为下面。 另外值得注意的是,如果SortMode是SpriteSortMode.Immediate,你可以改变所有的GraphicsDevice属性而不用再次调用Spritebatch.Begin。

  GraphicsDevice.BlendState = new BlendState { ColorSourceBlend = Blend.Zero, ColorDestinationBlend = Blend.InverseSourceColor, AlphaSourceBlend = Blend.Zero, AlphaDestinationBlend = Blend.InverseSourceColor }; 

在这里输入图像描述

一个选项可能是定义一个新的BlendState …并select正确的BlendFunction和因子来获得异或操作。 我不确定是否可以完成,但这是更简单的方法,应该是您的第一select。

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.blendstate.alphablendfunction.aspx

第二种select是使用HLSL着色器和rendertargets。

 1. You draw to rendertargetA you sprites 2. if you want to do a xor operation.. 3. you assign the texture source in your shader from rendertargetA 4. you draw with your xor shader to rendertargetB 5. exchange rendertarget reference, RendertargetA is now B, and viceversa 6. Draw from your rendertarget A to the backbuffer. Or something similar... :)