【问题标题】:Relationship between GraphicsDevice.Clear's color and the color drawn onto the screenGraphicsDevice.Clear 的颜色与绘制到屏幕上的颜色之间的关系
【发布时间】:2012-07-31 05:25:03
【问题描述】:

我是 XNA 的初学者,正在尝试我的新 kinect for windows,因此决定学习教程:http://digitalerr0r.wordpress.com/2011/06/20/kinect-fundamentals-2-basic-programming/

做完这个之后,我注意到所有的颜色都染成了浅蓝色。例如,RGB 20、20、20 的颜色看起来像深蓝色而不是深灰色。

我注意到GraphicsDevice.Clear() 正在使用Color.CornflowerBlue。我尝试将其更改为Color.Black,果然所有的东西现在都染成了黑色。

GraphicsDevice.Clear(color) 和绘制到屏幕上的颜色有什么关系?

这是我的绘图功能:

/// <summary>
/// This is called when the game should draw itself.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.Black);

    spriteBatch.Begin();
    spriteBatch.Draw(kinectRGBVideo, new Rectangle(0, 0, 640, 480), Color.White);
    spriteBatch.DrawString(font, connectedStatus, new Vector2(20, 80), Color.Black);
    spriteBatch.End();

    base.Draw(gameTime);
}

【问题讨论】:

  • 尝试在调用spriteBatch.Begin() 方法时更改BlendState。这决定了颜色在相互叠加时如何混合。
  • 不错!它工作得很好,将其更改为答案,我会接受它。哦对了,你知道为什么使用 BlendState.Opaque 会导致文本显示为块吗?

标签: c# xna kinect xna-4.0


【解决方案1】:

(根据要求,以答复的形式。)

尝试在调用 spriteBatch.Begin() 方法时更改 BlendState。这决定了颜色在相互叠加时如何混合。

我不确定为什么BlendState.Opaque 将文本显示为块,但我猜这种混合状态不支持 alpha。因此,文本周围的透明区域变得不透明,使文本看起来像一个矩形。我现在没有工具来检查我的这个猜测,所以我可以验证它。

【讨论】:

  • 这个猜测很有道理,而且很可能是原因。感谢您的回答!
  • Opaque 是对的。这正是正在发生的事情。它对于绘制 3D 模型很有用——对于精灵来说不是很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-03
  • 2015-08-22
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多