XNA 31 转换到 XNA40 的备忘录.docx
- 文档编号:8262026
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:25
- 大小:20.17KB
XNA 31 转换到 XNA40 的备忘录.docx
《XNA 31 转换到 XNA40 的备忘录.docx》由会员分享,可在线阅读,更多相关《XNA 31 转换到 XNA40 的备忘录.docx(25页珍藏版)》请在冰豆网上搜索。
XNA31转换到XNA40的备忘录
XNA3.1转换到XNA4.0的备忘录
xna3.1与4.0的区别不小,但也不是很大,在转换一些项目时候下面的tip能给些帮助。
SpriteBlendMode,SaveStateMode
//XNA3.1
sprite.Begin(SpriteBlendMode.AlphaBlend,SpriteSortMode.Deferred,SaveStateMode.SaveState);
//XNA4.0
sprite.Begin(SpriteSortMode.Deferred,BlendState.AlphaBlend);
//XNA3.1
//通过深度排列场景对象spriteBatch.Begin(SpriteBlendMode.AlphaBlend,SpriteSortMode.BackToFront,SaveStateMode.None);
//XNA4.0
//通过深度排列场景对象spriteBatch.Begin(SpriteSortMode.BackToFront,BlendState.AlphaBlend);
//XNA3.1
sprite.Begin(SpriteBlendMode.None,SpriteSortMode.Immediate,SaveStateMode.SaveState);
//XNA4.0
sprite.Begin(SpriteSortMode.Immediate,BlendState.Opaque);
//XNA3.1
//画背景图spriteBatch.Begin(SpriteBlendMode.None);
Viewportviewport=GraphicsDevice.Viewport;
spriteBatch.Draw(background,newRectangle(0,0,viewport.Width,viewport.Height),Color.White);
spriteBatch.End();
//XNA4.0
//画背景图spriteBatch.Begin(0,BlendState.Opaque);
spriteBatch.Draw(background,GraphicsDevice.Viewport.Bounds,Color.White);
spriteBatch.End();
RenderState
//XNA3.1
//启用alpha混合和深度写GraphicsDevice.RenderState.AlphaBlendEnable=true;
GraphicsDevice.RenderState.SourceBlend=Blend.SourceAlpha;
GraphicsDevice.RenderState.DestinationBlend=Blend.InverseSourceAlpha;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled=true;
GraphicsDevice.RenderState.AlphaBlendOperation=BlendFunction.Add;
GraphicsDevice.RenderState.AlphaSourceBlend=Blend.One;
GraphicsDevice.RenderState.AlphaDestinationBlend=Blend.One;
GraphicsDevice.RenderState.DepthBufferWriteEnable=false;
//XNA4.0
//启用alpha混合和深度写GraphicsDevice.BlendState=BlendState.AlphaBlend;
GraphicsDevice.DepthStencilState=DepthStencilState.DepthRead;
//XNA3.1
//重置混合和深度写GraphicsDevice.RenderState.AlphaBlendEnable=false;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled=false;
GraphicsDevice.RenderState.DepthBufferWriteEnable=true;
//XNA4.0
//重置混合和深度写GraphicsDevice.BlendState=BlendState.Additive;
GraphicsDevice.DepthStencilState=DepthStencilState.Default;
//XNA3.1
//启用深度缓冲GraphicsDevice.RenderState.DepthBufferEnable=true;
//XNA4.0
//启用深度缓冲GraphicsDevice.DepthStencilState=DepthStencilState.Default;
//XNA3.1
//禁用深度缓冲GraphicsDevice.RenderState.DepthBufferWriteEnable=false;
GraphicsDevice.RenderState.DepthBufferEnable=false;
//XNA4.0
//禁用深度缓冲GraphicsDevice.DepthStencilState=DepthStencilState.None;
//XNA3.1
//累加混合(zeroonalpha)
GraphicsDevice.RenderState.DepthBufferWriteEnable=false;
GraphicsDevice.RenderState.AlphaBlendEnable=true;
GraphicsDevice.RenderState.SourceBlend=Blend.One;
GraphicsDevice.RenderState.DestinationBlend=Blend.One;
//XNA4.0
//累加混合(zeroonalpha)
GraphicsDevice.DepthStencilState=DepthStencilState.DepthRead;
GraphicsDevice.BlendState=BlendState.AlphaBlend;
//XNA3.1
//恢复混合模式GraphicsDevice.RenderState.DepthBufferWriteEnable=true;
GraphicsDevice.RenderState.AlphaBlendEnable=false;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled=false;
//XNA4.0
//恢复混合模式GraphicsDevice.BlendState=BlendState.Opaque;
GraphicsDevice.DepthStencilState=DepthStencilState.Default;
//XNA3.1
//设置alpha混合,无深度测试和深度写GraphicsDevice.RenderState.DepthBufferEnable=false;
GraphicsDevice.RenderState.DepthBufferWriteEnable=false;
GraphicsDevice.RenderState.AlphaBlendEnable=true;
GraphicsDevice.RenderState.SourceBlend=Blend.SourceAlpha;
GraphicsDevice.RenderState.DestinationBlend=Blend.InverseSourceAlpha;
//XNA4.0
//设置alpha混合,无深度测试和深度写GraphicsDevice.DepthStencilState=DepthStencilState.None;
GraphicsDevice.BlendState=BlendState.AlphaBlend;
//XNA3.1
//绘制3D模型时设置合适渲染模式GraphicsDevice.RenderState.AlphaBlendEnable=false;
GraphicsDevice.RenderState.AlphaTestEnable=false;
GraphicsDevice.RenderState.DepthBufferEnable=true;
//XNA4.0
//绘制3D模型时设置合适渲染模式GraphicsDevice.BlendState=BlendState.Opaque;
GraphicsDevice.DepthStencilState=DepthStencilState.Default;
//XNA3.1
//加性混合GraphicsDevice.RenderState.AlphaBlendEnable=true;
GraphicsDevice.RenderState.SourceBlend=Blend.One;
GraphicsDevice.RenderState.DestinationBlend=Blend.One;
//XNA4.0
//加性混合GraphicsDevice.BlendState=BlendState.Additive;
//XNA3.1
//设置加性混合GraphicsDevice.RenderState.DestinationBlend=Blend.One;
//XNA4.0
//设置加性混合GraphicsDevice.BlendState=BlendState.Additive;
//XNA3.1
//设置alpha混合GraphicsDevice.RenderState.DestinationBlend=Blend.InverseSourceAlpha;
//XNA4.0
//设置alpha混合GraphicsDevice.BlendState=BlendState.AlphaBlend;
//XNA3.1
GraphicsDevice.RenderState.CullMode=CullMode.CullCounterClockwiseFace;
//XNA4.0
GraphicsDevice.RasterizerState=RasterizerState.CullCounterClockwise;
//XNA3.1
//设置渲染状态GraphicsDevice.RenderState.DepthBufferEnable=false;
GraphicsDevice.RenderState.DepthBufferWriteEnable=false;
GraphicsDevice.RenderState.AlphaBlendEnable=true;
GraphicsDevice.RenderState.SourceBlend=Blend.One;
GraphicsDevice.RenderState.DestinationBlend=Blend.One;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled=true;
GraphicsDevice.RenderState.AlphaBlendOperation=BlendFunction.Add;
GraphicsDevice.RenderState.AlphaDestinationBlend=Blend.Zero;
GraphicsDevice.RenderState.AlphaSourceBlend=Blend.Zero;
//drawingcodehere..
//恢复状态GraphicsDevice.RenderState.DepthBufferEnable=true;
GraphicsDevice.RenderState.DepthBufferWriteEnable=true;
GraphicsDevice.RenderState.AlphaBlendEnable=false;
GraphicsDevice.RenderState.SeparateAlphaBlendEnabled=false;
//XNA4.0
//存储状态DepthStencilStateds=GraphicsDevice.DepthStencilState;
BlendStatebs=GraphicsDevice.BlendState;
//设置渲染状态GraphicsDevice.DepthStencilState=DepthStencilState.DepthRead;
GraphicsDevice.BlendState=BlendState.AlphaBlend;
//drawingcodehere..
//恢复状态GraphicsDevice.DepthStencilState=ds;
GraphicsDevice.BlendState=bs;
Effect,EffectPass,Begin(),End(),CommitChanges(),Clone()
//应用效果XNA3.1
blurEffect.CommitChanges();
blurEffect.Begin(SaveStateMode.SaveState);
blurEffect.CurrentTechnique.Passes[0].Begin();
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList,0,2);
blurEffect.CurrentTechnique.Passes[0].End();
blurEffect.End();
//应用效果XNA4.0
blurEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList,0,2);
//XNA3.1
//提交效果改变effect.CommitChanges();
//XNA4.0
//当任何效果属性改变需要调用EffectPass.Apply()//否则就删除它//XNA3.1
//开始一个效果effect.Begin(SaveStateMode.SaveState);
effect.CurrentTechnique.Passes[0].Begin();
//XNA4.0
//开始一个效果effect.CurrentTechnique.Passes[0].Apply();
//XNA3.1
//结束一个效果effect.CurrentTechnique.Passes[0].End();
effect.End();
//XNA4.0
//如果不需要可直接删除//XNA3.1
//产生一个效果的克隆体EffectnewEffect=replacementEffect.Clone(replacementEffect.GraphicsDevice);
//XNA4.0
//产生一个效果的克隆体EffectnewEffect=replacementEffect.Clone();
//XNA3.1
//启用效果中的techpostprocessEffect.CurrentTechnique=postprocessEffect.Techniques[effectTechniqueName];
//用预处理效果画一个全屏的精灵.
spriteBatch.Begin(SpriteBlendMode.None,SpriteSortMode.Immediate,SaveStateMode.None);
postprocessEffect.Begin();
postprocessEffect.CurrentTechnique.Passes[0].Begin();
spriteBatch.Draw(sceneRenderTarget.GetTexture(),Vector2.Zero,Color.White);
spriteBatch.End();
postprocessEffect.CurrentTechnique.Passes[0].End();
postprocessEffect.End();
//XNA4.0
//启用效果中的techpostprocessEffect.CurrentTechnique=postprocessEffect.Techniques[effectTechniqueName];
//用预处理效果画一个全屏的精灵.spriteBatch.Begin(0,BlendState.Opaque,null,null,null,postprocessEffect);
spriteBatch.Draw(sceneRenderTarget,Vector2.Zero,Color.White);
spriteBatch.End();
ShaderProfile,TotalRealTime,TransparentBlack
//XNA3.1
graphics.MinimumPixelShaderProfile=ShaderProfile.PS_3_0;//anyPSnumber...
graphics.MinimumVertexShaderProfile=ShaderProfile.VS_3_0;//anyVSnumber...
//XNA4.0
//不再需要该语句//XNA3.1
floatmyTime=(float)gameTime.TotalRealTime.TotalSeconds*0.2f;
//XNA4.0
floatmyTime=(float)gameTime.TotalGameTime.TotalSeconds*0.2f;
//XNA3.1
GraphicsDevice.Clear(Color.TransparentBlack);
//XNA4.0
GraphicsDevice.Clear(Color.Transparent);
ResolveTexture2D,ResolveBackBuffer,RenderTarget2D,GetTexture,DepthStencilBuffer,PresentationParameters,MultiSampleType,MultiSampleQuality,SetRenderTarget
//XNA3.1
ResolveTexture2DsceneMap;
//XNA4.0
RenderTarget2DsceneMap;
//XNA3.1
//查询主缓冲的分辨率和格式.
PresentationParameterspp=GraphicsDevice.PresentationParameters;
//从缓冲读取一个材质数据.
sceneMap=newResolveTexture2D(GraphicsDevice,pp.BackBufferWidth,pp.BackBufferHeight,1,pp.BackBufferFormat);
//XNA4.0
//查询主缓冲的分辨率和格式.
PresentationParameterspp=GraphicsDevice.PresentationParameters;
//从缓冲读取一个材质数据.
sceneMap=newRenderTarget2D(GraphicsDevice,pp.BackBufferWidth,pp.BackBufferHeight,false,pp.BackBufferFormat,
pp.DepthStencilFormat);
//or
sceneMap=newRenderTarget2D(GraphicsDevice,pp.BackBufferWidth,pp.BackBufferHeight,false,pp.BackBufferFormat,
pp.DepthStencilFormat,pp.MultiSampleCount,RenderTargetUsage.DiscardContents);
//XNA3.1
GraphicsDevice.ResolveBackBuffer(sceneMap);
//XNA4.0
GraphicsDevice.SetRenderTarget(sceneMap);
//XNA3.1
intwidth=GraphicsDevice.Viewport.Width;
intheight=GraphicsDevice.Viewport.Height;
//创建渲染对象myRenderTarget=newRenderTarget2D(GraphicsDevice,width,height,1,SurfaceFormat.Color);
//XNA4.0
intwidth=GraphicsDevice.Viewport.Width;
intheight=GraphicsDevice.Viewport.Height;
//创建渲染对象myRenderTarget=newRenderTarget2D(GraphicsDevice,width,height,true,SurfaceFormat.Color,DepthFormat.Depth24);
//XNA3.1
PresentationParameterspp=GraphicsDevice.PresentationParameters;
//创建自动以渲染对象sceneRenderTarget=newRenderTarget2D(GraphicsDevice,pp.BackBufferWidth,pp.BackBufferHeight,1,
pp.BackBufferFormat,pp.Mul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XNA 31 转换到 XNA40 的备忘录 转换 备忘录