前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rna转录的方向是从5→3吗_转换到ois

rna转录的方向是从5→3吗_转换到ois

作者头像
全栈程序员站长
发布2022-11-03 11:20:39
5120
发布2022-11-03 11:20:39
举报
文章被收录于专栏:全栈程序员必看

XNA3.0到4.0的转换

http://blog.sina.com.cn/s/articlelist_1747721953_0_1.html

XNA4.0可以说是一个变化很大的版本了,许多类都被重构或者删除,转换的相关重点描述文章中,比较好的

是下面的URL地址: http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet/ 不过这篇文章有些细节还是漏掉了一部分,如在XNA3.0中下面的代码显示选择存储设备的界面. public static StorageDevice XnaUserDevice { get { // Create if not created yet. if (xnaUserDevice == null) xnaUserDevice = StorageDevice.ShowStorageDeviceGuide(PlayerIndex.One); return xnaUserDevice; } // get } // XnaUserDevice 但是上面的代码在4.0下会提示StorageDevice没有BeginShowSelector函数,那么,如何改写这段代码呢?

看下面的代码. public static StorageDevice XnaUserDevice { get { if (xnaUserDevice == null) result = StorageDevice.BeginShowSelector(PlayerIndex.One, null,null); if (result.IsCompleted) xnaUserDevice = StorageDevice.EndShowSelector(result); return xnaUserDevice; } // get } // XnaUserDevice 在XNA4.0中,Game类的LoadGraphicsContent方法被LoadContent替代. 3.0 中GameTime属性ElapsedRealTime已被4.0的ElapsedGameTime取代 ========

XNA 3.1 转换到 XNA4.0 的备忘录

http://blog.csdn.net/kenkao/article/details/11111623 http://www.cnblogs.com/Baesky/archive/2011/02/01/1948789.html xna3.1与4.0的区别不小,但也不是很大,在转换一些项目时候下面的tip能给些帮助。原文地址是:

http://blogs.msdn.com/b/shawnhar/archive/2011/01/04/xna-3-1-to-4-0-cheat-sheet.aspx?

utm_source=twitterfeed&utm_medium=twitter 遇到如下问题,该备忘录将解决的问题: The name ‘SpriteBlendMode‘ does not exist in the current context The name ‘SaveStateMode‘ does not exist in the current context ‘Microsoft.Xna.Framework.Graphics.GraphicsDevice‘ does not contain a definition for

‘RenderState‘… ‘Microsoft.Xna.Framework.Graphics.Effect‘ does not contain a definition for ‘Begin‘ … ‘Microsoft.Xna.Framework.Graphics.Effect‘ does not contain a definition for ‘End‘.. ‘Microsoft.Xna.Framework.Graphics.Effect‘ does not contain a definition for

‘CommitChanges‘ … ‘Microsoft.Xna.Framework.Graphics.EffectPass‘ does not contain a definition for ‘Begin‘

… ‘Microsoft.Xna.Framework.Graphics.EffectPass‘ does not contain a definition for ‘End‘

…. No overload for method ‘Clone‘ takes 1 arguments The name ‘ShaderProfile‘ does not exist in the current context ‘Microsoft.Xna.Framework.GameTime‘ does not contain a definition for ‘TotalRealTime‘ … ‘Microsoft.Xna.Framework.Color‘ does not contain a definition for ‘TransparentBlack‘ … The type or namespace name ‘ResolveTexture2D‘ could not be found … ‘Microsoft.Xna.Framework.Graphics.GraphicsDevice‘ does not contain a definition for

‘ResolveBackBuffer‘… The type or namespace name ‘DepthStencilBuffer‘ could not be found … ‘Microsoft.Xna.Framework.Graphics.RenderTarget2D‘ does not contain a constructor that

takes 5 arguments … ‘Microsoft.Xna.Framework.Graphics.RenderTarget2D‘ does not contain a definition for

‘GetTexture‘ … ‘Microsoft.Xna.Framework.Graphics.PresentationParameters‘ does not contain a definition

for ‘MultiSampleType‘ … ‘Microsoft.Xna.Framework.Graphics.PresentationParameters‘ does not contain a definition

for ‘MultiSampleQuality‘ … The best overloaded method match for

‘Microsoft.Xna.Framework.Graphics.GraphicsDevice.SetRenderTarget… ‘Microsoft.Xna.Framework.Graphics.GraphicsDevice‘ does not contain a definition for

‘VertexDeclaration‘ ‘Microsoft.Xna.Framework.Graphics.GraphicsDevice‘ does not contain a definition for

‘Vertices‘ ‘Microsoft.Xna.Framework.Graphics.VertexPositionTexture‘ does not contain a definition

for ‘SizeInBytes‘ ‘Microsoft.Xna.Framework.Graphics.VertexPositionTexture‘ does not contain a definition

for ‘VertexElements‘ ‘Microsoft.Xna.Framework.Graphics.ModelMesh‘ does not contain a definition for

‘IndexBuffer‘ ‘Microsoft.Xna.Framework.Graphics.ModelMesh‘ does not contain a definition for

‘VertexBuffer‘ ‘Microsoft.Xna.Framework.Graphics.ModelMeshPart‘ does not contain a definition for

‘BaseVertex‘ ‘Microsoft.Xna.Framework.Graphics.ModelMeshPart‘ does not contain a definition for

‘StreamOffset‘ ‘Microsoft.Xna.Framework.Graphics.ModelMeshPart‘ does not contain a definition for

‘VertexStride‘ ‘Microsoft.Xna.Framework.Storage.StorageContainer‘ does not contain a definition for

‘TitleLocation‘ ‘Microsoft.Xna.Framework.Storage.StorageContainer‘ does not contain a definition for

‘Path‘ ‘Microsoft.Xna.Framework.Storage.StorageDevice‘ does not contain a definition for

‘OpenContainer‘ ‘Microsoft.Xna.Framework.GamerServices.Guide‘ does not contain a definition for

‘BeginShowStorageDeviceSelector‘ ‘Microsoft.Xna.Framework.GamerServices.Guide‘ does not contain a definition for

‘EndShowStorageDeviceSelector‘ syntax error: unexpected token ‘VertexShader‘ syntax error: unexpected token ‘PixelShader‘ error X3539: ps_1_x is no longer supported PS:其他问题,如xna模型画出边界,看起来透明或者丢失顶点以及看起来不对劲。 —————————————————————————————- XNA 3.1 转为 XNA4.0 的例子: SpriteBlendMode, SaveStateMode

// XNA 3.1 sprite.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Deferred, SaveStateMode.SaveState); // XNA 4.0 sprite.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend); // XNA 3.1 // 通过深度排列场景对象

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront,

SaveStateMode.None); // XNA 4.0 // 通过深度排列场景对象

spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); // XNA 3.1 sprite.Begin(SpriteBlendMode.None, SpriteSortMode.Immediate, SaveStateMode.SaveState); // XNA 4.0 sprite.Begin(SpriteSortMode.Immediate, BlendState.Opaque); // XNA 3.1 // 画背景图

spriteBatch.Begin(SpriteBlendMode.None); Viewport viewport = GraphicsDevice.Viewport; spriteBatch.Draw(background, new Rectangle(0, 0, viewport.Width, viewport.Height),

Color.White); spriteBatch.End(); // XNA 4.0 // 画背景图

spriteBatch.Begin(0, BlendState.Opaque); spriteBatch.Draw(background, GraphicsDevice.Viewport.Bounds, Color.White); spriteBatch.End(); RenderState

// XNA 3.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; // XNA 4.0 // 启用alpha混合和深度写

GraphicsDevice.BlendState = BlendState.AlphaBlend; GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead; // XNA 3.1 // 重置混合和深度写

GraphicsDevice.RenderState.AlphaBlendEnable = false; GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = false; GraphicsDevice.RenderState.DepthBufferWriteEnable = true; // XNA 4.0 // 重置混合和深度写

GraphicsDevice.BlendState = BlendState.Additive; GraphicsDevice.DepthStencilState = DepthStencilState.Default; // XNA 3.1 // 启用深度缓冲

GraphicsDevice.RenderState.DepthBufferEnable = true; // XNA 4.0 // 启用深度缓冲

GraphicsDevice.DepthStencilState = DepthStencilState.Default; // XNA 3.1 // 禁用深度缓冲

GraphicsDevice.RenderState.DepthBufferWriteEnable = false; GraphicsDevice.RenderState.DepthBufferEnable = false; // XNA 4.0 // 禁用深度缓冲

GraphicsDevice.DepthStencilState = DepthStencilState.None; // XNA 3.1 // 累加混合(zero on alpha) GraphicsDevice.RenderState.DepthBufferWriteEnable = false; GraphicsDevice.RenderState.AlphaBlendEnable = true; GraphicsDevice.RenderState.SourceBlend = Blend.One; GraphicsDevice.RenderState.DestinationBlend = Blend.One; // XNA 4.0 // 累加混合(zero on alpha) GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead; GraphicsDevice.BlendState = BlendState.AlphaBlend; // XNA 3.1 // 恢复混合模式

GraphicsDevice.RenderState.DepthBufferWriteEnable = true; GraphicsDevice.RenderState.AlphaBlendEnable = false; GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = false; // XNA 4.0 // 恢复混合模式

GraphicsDevice.BlendState = BlendState.Opaque; GraphicsDevice.DepthStencilState = DepthStencilState.Default; // XNA 3.1 // 设置alpha混合,无深度测试和深度写 ? 1 2 3 4 5 6 7 GraphicsDevice.RenderState.DepthBufferEnable = false; GraphicsDevice.RenderState.DepthBufferWriteEnable = false; GraphicsDevice.RenderState.AlphaBlendEnable = true; GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha; GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha; // XNA 4.0 // 设置alpha混合,无深度测试和深度写

GraphicsDevice.DepthStencilState = DepthStencilState.None; GraphicsDevice.BlendState = BlendState.AlphaBlend; // XNA 3.1 // 绘制3D模型时设置合适渲染模式

GraphicsDevice.RenderState.AlphaBlendEnable = false; GraphicsDevice.RenderState.AlphaTestEnable = false; GraphicsDevice.RenderState.DepthBufferEnable = true; // XNA 4.0 // 绘制3D模型时设置合适渲染模式

GraphicsDevice.BlendState = BlendState.Opaque; GraphicsDevice.DepthStencilState = DepthStencilState.Default; // XNA 3.1 // 加性混合

GraphicsDevice.RenderState.AlphaBlendEnable = true; GraphicsDevice.RenderState.SourceBlend = Blend.One; GraphicsDevice.RenderState.DestinationBlend = Blend.One; // XNA 4.0 // 加性混合

GraphicsDevice.BlendState = BlendState.Additive; // XNA 3.1 // 设置加性混合

GraphicsDevice.RenderState.DestinationBlend = Blend.One; // XNA 4.0 // 设置加性混合

GraphicsDevice.BlendState = BlendState.Additive; // XNA 3.1 // 设置alpha混合

GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha; // XNA 4.0 // 设置alpha混合

GraphicsDevice.BlendState = BlendState.AlphaBlend; // XNA 3.1 GraphicsDevice.RenderState.CullMode = CullMode.CullCounterClockwiseFace; // XNA 4.0 GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise; // XNA 3.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; // drawing code here.. // 恢复状态

GraphicsDevice.RenderState.DepthBufferEnable = true; GraphicsDevice.RenderState.DepthBufferWriteEnable = true; GraphicsDevice.RenderState.AlphaBlendEnable = false; GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = false; // XNA 4.0 //存储状态

DepthStencilState ds = GraphicsDevice.DepthStencilState; BlendState bs = GraphicsDevice.BlendState; //设置渲染状态

GraphicsDevice.DepthStencilState = DepthStencilState.DepthRead; GraphicsDevice.BlendState = BlendState.AlphaBlend; // drawing code here.. // 恢复状态

GraphicsDevice.DepthStencilState = ds; GraphicsDevice.BlendState = bs; Effect, EffectPass, Begin(), End(), CommitChanges(), Clone() // 应用效果 XNA 3.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(); // 应用效果 XNA 4.0 blurEffect.CurrentTechnique.Passes[0].Apply(); GraphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, 2); // XNA 3.1 // 提交效果改变

effect.CommitChanges(); // XNA 4.0 // 当任何效果属性改变需要调用EffectPass.Apply()

// 否则就删除它

// XNA 3.1 // 开始一个效果

effect.Begin(SaveStateMode.SaveState); effect.CurrentTechnique.Passes[0].Begin(); // XNA 4.0 // 开始一个效果

effect.CurrentTechnique.Passes[0].Apply(); // XNA 3.1 // 结束一个效果

effect.CurrentTechnique.Passes[0].End(); effect.End(); // XNA 4.0 // 如果不需要可直接删除

// XNA 3.1 // 产生一个效果的克隆体

Effect newEffect = replacementEffect.Clone(replacementEffect.GraphicsDevice); // XNA 4.0 // 产生一个效果的克隆体

Effect newEffect = replacementEffect.Clone(); // XNA 3.1 // 启用效果中的tech

postprocessEffect.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(); // XNA 4.0 // 启用效果中的tech

postprocessEffect.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

// XNA 3.1 graphics.MinimumPixelShaderProfile = ShaderProfile.PS_3_0; //any PS number… graphics.MinimumVertexShaderProfile = ShaderProfile.VS_3_0;//any VS number… // XNA 4.0 // 不再需要该语句

// XNA 3.1 float myTime = (float)gameTime.TotalRealTime.TotalSeconds * 0.2f; // XNA 4.0 float myTime = (float)gameTime.TotalGameTime.TotalSeconds * 0.2f; // XNA 3.1 GraphicsDevice.Clear(Color.TransparentBlack); // XNA 4.0 GraphicsDevice.Clear(Color.Transparent); ResolveTexture2D, ResolveBackBuffer, RenderTarget2D, GetTexture, DepthStencilBuffer,

PresentationParameters, MultiSampleType, MultiSampleQuality, SetRenderTarget

// XNA 3.1 ResolveTexture2D sceneMap; // XNA 4.0 RenderTarget2D sceneMap; // XNA 3.1 // 查询主缓冲的分辨率和格式. PresentationParameters pp = GraphicsDevice.PresentationParameters; // 从缓冲读取一个材质数据. sceneMap = new ResolveTexture2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, 1,

pp.BackBufferFormat); // XNA 4.0 // 查询主缓冲的分辨率和格式. PresentationParameters pp = GraphicsDevice.PresentationParameters; // 从缓冲读取一个材质数据. sceneMap = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight,

false, pp.BackBufferFormat, pp.DepthStencilFormat); //or sceneMap = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight,

false, pp.BackBufferFormat, pp.DepthStencilFormat, pp.MultiSampleCount,

RenderTargetUsage.DiscardContents); // XNA 3.1 GraphicsDevice.ResolveBackBuffer(sceneMap); // XNA 4.0 GraphicsDevice.SetRenderTarget(sceneMap); // XNA 3.1 int width = GraphicsDevice.Viewport.Width; int height = GraphicsDevice.Viewport.Height; // 创建渲染对象

myRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, 1, SurfaceFormat.Color); // XNA 4.0 int width = GraphicsDevice.Viewport.Width; int height = GraphicsDevice.Viewport.Height; // 创建渲染对象

myRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, true,

SurfaceFormat.Color, DepthFormat.Depth24); // XNA 3.1 PresentationParameters pp = GraphicsDevice.PresentationParameters; // 创建自动以渲染对象

sceneRenderTarget = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth,

pp.BackBufferHeight, 1, pp.BackBufferFormat, pp.MultiSampleType,

pp.MultiSampleQuality); // XNA 4.0 PresentationParameters pp = GraphicsDevice.PresentationParameters; // 创建自动以渲染对象

sceneRenderTarget = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth,

pp.BackBufferHeight, false, pp.BackBufferFormat, pp.DepthStencilFormat,

pp.MultiSampleCount, RenderTargetUsage.DiscardContents); // XNA 3.1 PresentationParameters pp = GraphicsDevice.PresentationParameters; // 配置一个深度缓冲

drawBuffer = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, 1, SurfaceFormat.Color, pp.MultiSampleType,

pp.MultiSampleQuality); drawDepthBuffer = new DepthStencilBuffer(GraphicsDevice, pp.AutoDepthStencilFormat, pp.MultiSampleType, pp.MultiSampleQuality); // XNA 4.0 PresentationParameters pp = GraphicsDevice.PresentationParameters; // 配置一个深度缓冲

drawBuffer = new RenderTarget2D(GraphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight,

true, SurfaceFormat.Color,DepthFormat.Depth24Stencil8, pp.MultiSampleCount, RenderTargetUsage.DiscardContents); //NOTE: DepthStencilBuffer 类不再存在

// XNA 3.1 spriteBatch.Draw(myRenderTarget.GetTexture(), Vector2.Zero, Color.White); // XNA 4.0 spriteBatch.Draw(myRenderTarget, Vector2.Zero, Color.White); // NOTE: “.GetTexure()” 不再

需要

// XNA 3.1 Texture2D myTexture = myRenderTarget.GetTexture(); // XNA 4.0 Texture2D myTexture = myRenderTarget; // NOTE: “.GetTexure()” No longer needed // XNA 3.1 GraphicsDevice.SetRenderTarget(0, myRenderTarget); // XNA 4.0 GraphicsDevice.SetRenderTarget(myRenderTarget); // XNA 3.1 // 设置两个渲染目标

GraphicsDevice.SetRenderTarget(0, colorRT); GraphicsDevice.SetRenderTarget(1, depthRT); // XNA 4.0 // 设置两个渲染目标

GraphicsDevice.SetRenderTargets(colorRT, depthRT); // XNA 3.1 GraphicsDevice.SetRenderTarget(0, null); // XNA 4.0 GraphicsDevice.SetRenderTarget(null); // XNA 3.1 // 将深度缓冲解析为深度图

GraphicsDevice.ResolveBackBuffer(depthMap); // 绘制场景图, 用深度图模糊它

GraphicsDevice.Textures[1] = depthMap; Viewport viewport = GraphicsDevice.Viewport; dofEffect.CurrentTechnique = depthBlurTechnique; DrawFullscreenQuad(sceneMap, viewport.Width, viewport.Height, dofEffect); // XNA 4.0 // 将深度缓冲解析为深度图

GraphicsDevice.SetRenderTarget(null); // 绘制场景图, 用深度图模糊它

GraphicsDevice.Textures[1] = depthMap; GraphicsDevice.SamplerStates[1] = SamplerState.PointClamp; Viewport viewport = GraphicsDevice.Viewport; dofEffect.CurrentTechnique = depthBlurTechnique; DrawFullscreenQuad(sceneMap, viewport.Width, viewport.Height, dofEffect); // XNA 3.1 ResolveTexture2D resolveTarget; RenderTarget2D renderTarget1; RenderTarget2D renderTarget2; // 查找主缓冲的分辨率和格式. PresentationParameters pp = GraphicsDevice.PresentationParameters; int width = pp.BackBufferWidth; int height = pp.BackBufferHeight; SurfaceFormat format = pp.BackBufferFormat; // 创建一个材质读取缓冲中的内容. resolveTarget = new ResolveTexture2D(GraphicsDevice, width, height, 1, format); // Create two rendertargets half size for the bloom processing. width /= 2; height /= 2; renderTarget1 = new RenderTarget2D(GraphicsDevice, width, height, 1,format); renderTarget2 = new RenderTarget2D(GraphicsDevice, width, height, 1,format); // … In the Draw Method… GraphicsDevice.ResolveBackBuffer(resolveTarget); // …apply effect and draw pass 1… // XNA 4.0 RenderTarget2D sceneRenderTarget; RenderTarget2D renderTarget1; RenderTarget2D renderTarget2; // 查找主缓冲的分辨率和格式. . PresentationParameters pp = GraphicsDevice.PresentationParameters; int width = pp.BackBufferWidth; int height = pp.BackBufferHeight; SurfaceFormat format = pp.BackBufferFormat; // Create a texture for rendering the main scene, prior to applying bloom. sceneRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, false, format, pp.DepthStencilFormat, pp.MultiSampleCount, RenderTargetUsage.DiscardContents); // Create two rendertargets half size for the bloom processing. width /= 2; height /= 2; renderTarget1 = new RenderTarget2D(GraphicsDevice, width, height, false, format,

DepthFormat.None); renderTarget2 = new RenderTarget2D(GraphicsDevice, width, height, false, format,

DepthFormat.None); // …In the Draw Method… GraphicsDevice.SetRenderTarget(sceneRenderTarget); GraphicsDevice.SamplerStates[1] = SamplerState.LinearClamp; // …apply effect and draw pass 1…. VertexDeclaration, Vertices, VertexElements, SizeInBytes

// XNA 3.1 // Vertex declaration for rendering our 3D model. GraphicsDevice.VertexDeclaration = new VertexDeclaration

(VertexPositionTexture.VertexElements); // XNA 4.0 // Delete it. No longer needed. // XNA 3.1 // set vertex buffer and declaration GraphicsDevice.VertexDeclaration = vertexDeclaration; GraphicsDevice.Vertices[0].SetSource(vertexBuffer, 0, VertexPositionTexture.SizeInBytes); // XNA 4.0 // set vertex buffer and declaration GraphicsDevice.SetVertexBuffer(vertexBuffer); // XNA 3.1 // create vertex declaration vertexDeclaration = new VertexDeclaration(GraphicsDevice,

VertexPositionTexture.VertexElements); // XNA 4.0 // create vertex declaration vertexDeclaration = new VertexDeclaration

(VertexPositionTexture.VertexDeclaration.GetVertexElements()); // XNA 3.1 // reset vertex buffer declaration GraphicsDevice.VertexDeclaration = null; GraphicsDevice.Vertices[0].SetSource(null, 0, 0); // XNA 4.0 // reset vertex buffer declaration GraphicsDevice.SetVertexBuffer(null); // XNA 3.1 // the vertices array VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[100]; // set new particles to vertex buffer vertexBuffer.SetData<VertexPositionNormalTexture>(VertexPositionNormalTexture.SizeInBytes *

vertexCount, vertices,vertexCount,count,VertexPositionNormalTexture.SizeInBytes); // XNA 4.0 // the vertices array VertexPositionNormalTexture[] vertices = new VertexPositionNormalTexture[100]; // set new particles to vertex buffer vertexBuffer.SetData<VertexPositionNormalTexture>(vertices);

VertexBuffer, StreamOffset, VertexStride, IndexBuffer, BaseVertex

// XNA 3.1 // for each mesh part foreach (ModelMeshPart meshPart in mesh.MeshParts) { // if primitives to render if (meshPart.PrimitiveCount > 0) { // setup vertices and indices GraphicsDevice.VertexDeclaration = meshPart.VertexDeclaration; GraphicsDevice.Vertices[0].SetSource(mesh.VertexBuffer, meshPart.StreamOffset,

meshPart.VertexStride); GraphicsDevice.Indices = mesh.IndexBuffer; … // XNA 4.0 GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; // may be needed in some

cases… // for each mesh part foreach (ModelMeshPart meshPart in mesh.MeshParts) { // if primitives to render if (meshPart.PrimitiveCount > 0) { // setup vertices and indices GraphicsDevice.SetVertexBuffer(meshPart.VertexBuffer); GraphicsDevice.Indices = meshPart.IndexBuffer; … // XNA 3.1 // draw primitives GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, meshPart.BaseVertex, 0, meshPart.NumVertices, meshPart.StartIndex, meshPart.PrimitiveCount); // XNA 4.0 // draw primitives GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, meshPart.VertexOffset, 0, meshPart.NumVertices, meshPart.StartIndex, meshPart.PrimitiveCount); Points, PointSpriteEnable, PointSizeMax, PointList

// XNA 3.1 // create the vertex buffer vertexBuffer = new VertexBuffer(GraphicsDevice, typeof(VertexPositionNormalTexture), 250, BufferUsage.WriteOnly | BufferUsage.Points); // XNA 4.0 // create the vertex buffer vertexBuffer = new VertexBuffer(GraphicsDevice, typeof(VertexPositionNormalTexture), 250, BufferUsage.WriteOnly | BufferUsage.None); // XNA 3.1 // enable point sprite 3.1 GraphicsDevice.RenderState.PointSpriteEnable = true; GraphicsDevice.RenderState.PointSizeMax = 128; // XNA 4.0 // Delete it. No longer available. // XNA 3.1 // draw the point sprites GraphicsDevice.DrawPrimitives(PrimitiveType.PointList, vertexPosition, numberVertices); // XNA 4.0 // draw the point sprites GraphicsDevice.DrawPrimitives(PrimitiveType.LineList, vertexPosition, numberVertices); OpenContainer, BeginShowStorageDeviceSelector, EndShowStorageDeviceSelector, Path,

TitleLocation, FileStream

// XNA 3.1 // open the container StorageContainer storageContainer = storageDevice.OpenContainer(“YourGameName”); // XNA 4.0 //To make life easier simply create a method to replace the storageDevice.OpenContainer… /// <summary> /// Synchronously opens storage container /// </summary> private static StorageContainer OpenContainer(StorageDevice storageDevice, string

saveGameName) { IAsyncResult result = storageDevice.BeginOpenContainer(saveGameName, null, null); // Wait for the WaitHandle to become signaled. result.AsyncWaitHandle.WaitOne(); StorageContainer container = storageDevice.EndOpenContainer(result); // Close the wait handle. result.AsyncWaitHandle.Close(); return container; } // open the container StorageContainer storageContainer = OpenContainer(storageDevice, “YourGameName”); // XNA 3.1 // retrieve the storage device Guide.BeginShowStorageDeviceSelector(GetStorageDeviceResult, retrievalDelegate); // XNA 4.0 // retrieve the storage device if (!Guide.IsVisible) { StorageDevice.BeginShowSelector(GetStorageDeviceResult, retrievalDelegate); } // XNA 3.1 // retrieve and store the storage device storageDevice = Guide.EndShowStorageDeviceSelector(result); // XNA 4.0 // retrieve and store the storage device storageDevice = StorageDevice.EndShowSelector(result); // XNA 3.1 // get the level setup files string[] filenames = Directory.GetFiles(storageContainer.Path, “LevelSetup*.xml”); // XNA 4.0 // get the level setup files string[] filenames = storageContainer.GetFileNames(“LevelSetup*.xml””); // XNA 3.1 // save game level data using (FileStream stream = new FileStream(Path.Combine(storageContainer.Path,

levelFilename), FileMode.Create)) { new XmlSerializer(typeof(SaveGameLevel)).Serialize(stream, levelData); } // XNA 4.0 // save game level data using (Stream stream = storageContainer.OpenFile(levelFilename, FileMode.Create)) { new XmlSerializer(typeof(SaveGameLevel)).Serialize(stream, levelData); } // XNA 3.1 // Delete the saved game level data. using (StorageContainer storageContainer = storageDevice.OpenContainer(“saveGameName”)) { File.Delete(Path.Combine(storageContainer.Path, saveGameLevel.FileName)); File.Delete(Path.Combine(storageContainer.Path, “SaveGameLevel” + Path.GetFileNameWithoutExtension(saveGameLevel.FileName).Substring(8) +”.xml”)); } // XNA 4.0 // Delete the saved game level data. NOTE: using OpenContainer method created in previous

example using (StorageContainer storageContainer = OpenContainer(storageDevice, “saveGameName”)) { storageContainer.DeleteFile(saveGameLevel.FileName); storageContainer.DeleteFile(“SaveGameLevel” + Path.GetFileNameWithoutExtension(saveGameLevel.FileName).Substring(8) + “.xml”); } // XNA 3.1 //Load the Next Level… // Find the path of the next level. string levelPath; // Loop here so we can try again when we can’t find a level. while (true) { // Try to find the next level. They are sequentially numbered txt files. levelPath = String.Format(“Levels/{0}.txt”, ++levelIndex); levelPath = Path.Combine(StorageContainer.TitleLocation, “Content/” + levelPath); if (File.Exists(levelPath)) break; // If there isn’t even a level 0, something has gone wrong. if (levelIndex == 0) throw new Exception(“No levels found.”); // Whenever we can’t find a level, start over again at 0. levelIndex = -1; } // Unloads the content for the current level before loading the next one. if (level != null) level.Dispose(); // Load the level. level = new Level(Services, levelPath); // XNA 4.0 // Load the Next Level… // move to the next level levelIndex = (levelIndex + 1) % numberOfLevels; // Unloads the content for the current level before loading the next one. if (level != null) level.Dispose(); // Load the level. string levelPath = string.Format(“Content/Levels/{0}.txt”, levelIndex); using (Stream fileStream = TitleContainer.OpenStream(levelPath)) level = new Level(Services, fileStream, levelIndex); // XNA 3.1 //Save the current state of the session, with the given storage device. // check the parameter if ((storageDevice == null) || !storageDevice.IsConnected) { return; } // open the container using (StorageContainer storageContainer = storageDevice.OpenContainer

(Session.SaveGameContainerName)) { string filename; string descriptionFilename; // get the filenames if (overwriteDescription == null) { int saveGameIndex = 0; string testFilename; do { saveGameIndex++; testFilename = Path.Combine(storageContainer.Path, “SaveGame” +

saveGameIndex.ToString() + “.xml”); } while (File.Exists(testFilename)); filename = testFilename; descriptionFilename = “SaveGameDescription” + saveGameIndex.ToString() + “.xml”; } else { filename = Path.Combine(storageContainer.Path, overwriteDescription.FileName); descriptionFilename = “SaveGameDescription” + Path.GetFileNameWithoutExtension(overwriteDescription.FileName).Substring(8) +

“.xml”; } using (FileStream stream = new FileStream(filename, FileMode.Create)) { using (XmlWriter xmlWriter = XmlWriter.Create(stream)) { //create and write xml data… } } // create the save game description SaveGameDescription description = new SaveGameDescription(); description.FileName = Path.GetFileName(filename); description.ChapterName = IsQuestLineComplete ? “Quest Line Complete” : Quest.Name; description.Description = DateTime.Now.ToString(); using (FileStream stream = new FileStream(Path.Combine(storageContainer.Path,

descriptionFilename), FileMode.Create)) { new XmlSerializer(typeof(SaveGameDescription)).Serialize(stream, description); } } // XNA 4.0 //Save the current state of the session, with the given storage device. // check the parameter if ((storageDevice == null) || !storageDevice.IsConnected) { return; } // open the container Note: using OpenContainer method from previous examples using (StorageContainer storageContainer = OpenContainer(storageDevice,

Session.SaveGameContainerName)) { string filename; string descriptionFilename; // get the filenames if (overwriteDescription == null) { int saveGameIndex = 0; string testFilename; do { saveGameIndex++; testFilename = “SaveGame” + saveGameIndex.ToString() + “.xml”; } while (storageContainer.FileExists(testFilename)); filename = testFilename; descriptionFilename = “SaveGameDescription” + saveGameIndex.ToString() + “.xml”; } else { filename = overwriteDescription.FileName; descriptionFilename = “SaveGameDescription” + Path.GetFileNameWithoutExtension(overwriteDescription.FileName).Substring(8) +

“.xml”; } // Note: using Stream instead of FileStream… using (Stream stream = storageContainer.OpenFile(filename, FileMode.Create)) { using (XmlWriter xmlWriter = XmlWriter.Create(stream)) { //create and write xml data… } } // create the save game description SaveGameDescription description = new SaveGameDescription(); description.FileName = Path.GetFileName(filename); description.ChapterName = IsQuestLineComplete ? “Quest Line Complete” : Quest.Name; description.Description = DateTime.Now.ToString(); // Note: using Stream instead of FileStream… using (Stream stream = storageContainer.OpenFile(descriptionFilename, FileMode.Create)) { new XmlSerializer(typeof(SaveGameDescription)).Serialize(stream, description); } }

VertexShader, PixelShader, ps_1_x

// XNA 3.1 VertexShaderOutput VertexShader(…) { //some code } float4 PixelShader(…) { // some code } // XNA 4.0 // VertexShader can not be used VertexShaderOutput VertexShaderFunction(…) { // some code } // PixelShader can not be used float4 PixelShaderFunction(…) { // some code } // XNA 3.1 technique { pass { VertexShader = compile vs_1_1 VertexShader(); PixelShader = compile ps_1_1 PixelShader(); } } // XNA 4.0 technique { pass { VertexShader = compile vs_2_0 VertexShaderFunction(); //VertexShader can not be

used & set vs higher than 1_1 PixelShader = compile ps_2_0 PixelShaderFunction(); //PixelShader can not be used

& set ps higher than 1_1 } } XNA Model drawn inside out, slightly transparent, missing parts or just looks wrong

// Set suitable renderstates for drawing a 3D model GraphicsDevice.BlendState = BlendState.Opaque; GraphicsDevice.DepthStencilState = DepthStencilState.Default; // your model draw code starts here… ========

XNA3.1 – 4.0对应表

http://www.codeweblog.com/%E8%BD%AC-xna3-1-4-0%E5%AF%B9%E5%BA%94%E8%A1%A8/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179519.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • XNA3.0到4.0的转换
  • XNA 3.1 转换到 XNA4.0 的备忘录
  • XNA3.1 – 4.0对应表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档