我遇到了纹理问题.GetData,是AccessViolationExcpetions的原因。
我试图做以下事情:
Texture2D texture;
foreach (var mesh in model.Meshes)
foreach (BasicEffect effect in mesh.Effects)
texture = effect.Texture;
或
texture = ((BasicEffect)model.Meshes[0].Effects[0]).Texture;
然后:
Color[] data = new Color[texture.Width * texture.Height];
texture.GetData(data);
for (int i = 0; i < data.Length - 1; i++)
{
if (IsSimilar(data[i], new Color(58, 59, 248), 40, 40, 40))
data[i] = Color.Red;
}
texture.SetData(data);
foreach (var mesh in model.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
effect.Texture = texture;
}
但是在texture.GetData(data)它会抛出一个AccessViolationException,显然我不允许读取模型上的纹理? 有人知道如何解决这个问题吗?
如果我只是用加载的纹理尝试它一切正常,但因为我们正在处理许多不同的模型。找出模型需要的纹理,然后重新着色纹理并应用它将是一件很麻烦的事。
答案 0 :(得分:0)
纹理的格式是什么?它有mimaps吗?
我希望普通模型在处理后使用mipmap压缩纹理。因此,传递给GetData的数组可能是错误的类型和错误的长度。
如果您可以在模型处理器上禁用mipmap生成和纹理压缩,请执行此操作以立即解决此问题。但是,如果你需要压缩和mipmap,这个工作的解决方案会变得更加复杂。