Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不使用XNA中的SpriteBatch的情况下绘制纹理?_C#_Xna - Fatal编程技术网

C# 如何在不使用XNA中的SpriteBatch的情况下绘制纹理?

C# 如何在不使用XNA中的SpriteBatch的情况下绘制纹理?,c#,xna,C#,Xna,所以我在做一个项目,我有一个基于3d立方体的世界。我已经完成了所有这些工作,我正在启动用户界面,当我开始使用spritebatch绘制光标纹理时,我发现XNA并没有正确地对所有模型进行分层,一些更远的模型将首先绘制,而不是在模型后面。当我取出所有的spritebatch代码时,就是这样: spriteBatch.Begin(); cursor.draw(spriteBatch); spriteBatch.End(); 我发现问题马上就解决了。光标

所以我在做一个项目,我有一个基于3d立方体的世界。我已经完成了所有这些工作,我正在启动用户界面,当我开始使用spritebatch绘制光标纹理时,我发现XNA并没有正确地对所有模型进行分层,一些更远的模型将首先绘制,而不是在模型后面。当我取出所有的spritebatch代码时,就是这样:

        spriteBatch.Begin();
        cursor.draw(spriteBatch);
        spriteBatch.End();
我发现问题马上就解决了。光标是一个对象,绘制方法仅使用spriteBatch.draw

在我看来,有两种解决方案,我可以找到一种不使用SpriteBatch绘制光标和其他界面的方法,或者SpriteBatch中可能有一个参数。开始我可以插入来解决问题吗?我不知道如何做这两个,其他人遇到这个问题,知道如何解决吗

提前谢谢。

你看了吗

可以使用最后一个参数layerDepth来控制精灵的绘制顺序。如果您使用该选项,请确保在SpriteBatch中签出。开始。。。也给我打电话。这包括你需要做什么吗

编辑:还要注意,这意味着使用正确的透视矩阵,在2D中绘制。我假设您希望光标以2D显示在所有其他内容之上,在所有3D内容之后,很可能在Z=0的位置绘制精灵,例如,使前面的对象阻挡精灵。

您看过吗

可以使用最后一个参数layerDepth来控制精灵的绘制顺序。如果您使用该选项,请确保在SpriteBatch中签出。开始。。。也给我打电话。这包括你需要做什么吗

编辑:还要注意,这意味着使用正确的透视矩阵,在2D中绘制。我假设您希望光标以2D显示在所有其他内容之上,并且在所有3D内容之后,很有可能在Z=0的位置绘制精灵,例如,使前面的对象阻挡精灵。

这并不能回答问题! 我不确定您是否可以或应该在不使用spritebatch的情况下绘制2D,但在使用2D spritebatch时,我在3D模型渲染方面遇到了相同的问题,并且帮助我解决了这个问题:

您的设备状态可能是错误的。这通常发生在混合时 2D和3D例如SpriteBatch的重载。从哪个开始 不带参数设置与不兼容的某些设备状态 三维渲染。不过别担心,你所要做的就是确保 以下设备状态设置为所需的方式:

基本上,首先为2D绘制调用SpriteBatch方法,然后调用上面的代码确保正确的3D渲染,然后绘制3D模型。事实上,我只使用了前两行-BlendState和DepthStencilState,它的工作原理是正确的。

这并不能回答问题! 我不确定您是否可以或应该在不使用spritebatch的情况下绘制2D,但在使用2D spritebatch时,我在3D模型渲染方面遇到了相同的问题,并且帮助我解决了这个问题:

您的设备状态可能是错误的。这通常发生在混合时 2D和3D例如SpriteBatch的重载。从哪个开始 不带参数设置与不兼容的某些设备状态 三维渲染。不过别担心,你所要做的就是确保 以下设备状态设置为所需的方式:


基本上,首先为2D绘制调用SpriteBatch方法,然后调用上面的代码确保正确的3D渲染,然后绘制3D模型。事实上,我只使用了前两行-BlendState和DepthStencilState,它正常工作。

我不是肯定的,但你不能只启用普通鼠标光标,然后如果你想改变它的外观,我想有windows api调用可以做到这一点。但我不确定。我只是用鼠标开始,稍后我会添加一些HUD用于游戏。因此,如果我找到一种方法来绘制鼠标,同时保持正确绘制模型,那么我可以继续使用界面。我不是肯定的,但你不能只启用普通鼠标光标,然后如果你想改变它的外观,我想有windows api调用可以做到这一点。但我不确定。我只是用鼠标开始,稍后我会添加一些HUD用于游戏。因此,如果我找到了一种方法来在正确绘制模型的同时绘制鼠标,那么我可以继续使用界面。
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;