C# Monogame - premultiplied alpha
本文关键字:alpha premultiplied Monogame | 更新日期: 2023-09-27 18:05:49
我需要一个淡出效果在我的屏幕之间的过渡。我在网上看到,XNA 3的alpha混合旧方法已被弃用,应该使用XNA 4的预乘alpha。所以我用的是Monogame我假设代码是一样的但你能解释一下这个预乘法吗?另外一个代码示例兼容我自己的代码将是伟大的!以下是其中一些:
// Variables
private Texture2D image;
private Vector2 imagePosition;
private Color startColour;
private Color endColour;
private float alpha;
// Constructor
public myClass()
{
startColour = new Color(0.0f, 0.0f, 0.0f, 0.0f);
endColour = new Color(255.0f, 255.0f, 255.0f, 255.0f);
alpha = 0.0f;
}
// Update method
public void Update(GameTime gameTime)
{
// ??????
}
// Draw method
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Begin();
spriteBatch.Draw(image, imagePos, startColour * alpha); // ???
spriteBatch.End();
}
我相信大部分代码都在那里,但我仍然需要更新alpha,将其从0更改为1,或者这是如何从白色淡出?我想从白色变成不透明。那么你该怎么做呢?我的Update()
方法中应该有什么代码,我应该如何更改当前的代码?
这应该是相当简单的,如果我理解正确的话,你试图从白色到无。
public myClass()
{
...
alpha = 1.0f; // I'm almost sure that 1 means solid
}
public void Update(GameTime gameTime)
{
if (alpha > 0.0f) alpha -= 0.01f;
}
考虑到Update()
每帧被调用,这意味着默认情况下每秒60次(在当前的单游戏版本中),所以你必须调整0.01f
的小数点位置以使其尽可能快。
你也可以在spriteBatch.draw
中使用Color.White * alpha
。你需要把所有在(上面)之前出现的东西的绘图称为"窗帘"的绘图。