【问题标题】:XNA .GetData gives AccessViolationExceptions texture of modelXNA .GetData 提供模型的 AccessViolationExceptions 纹理
【发布时间】:2017-02-28 15:28:59
【问题描述】:

我在使用 texture.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,显然我不允许读取模型上的纹理?? 有人知道如何解决这个问题吗?

如果我只是尝试加载纹理,一切都很好,但因为我们正在处理许多不同的模型。找出模型需要哪种纹理,然后重新着色并应用它会很麻烦。

【问题讨论】:

    标签: c# visual-studio xna monogame


    【解决方案1】:

    纹理的格式是什么?它有mimaps吗?

    我希望普通模型在处理后具有带有 mipmap 的压缩纹理。因此,您传递给 GetData 的数组可能是错误的类型和错误的长度。

    如果您可以在模型处理器上禁用 mipmap 生成和纹理压缩,请立即解决此问题。但是,如果您需要压缩和 mipmap,使这项工作的解决方案变得更加复杂。

    【讨论】:

    • 感谢您的回答。同时,我通过将纹理(png 文件)传递给我的游戏对象,重新着色然后将其应用于模型来解决这个问题。哪个工作正常。我对纹理压缩器和mimaps一无所知。将对此进行一些调查,但不再需要它。谢谢! :)
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2014-01-14
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2013-02-05
    • 2010-12-18
    相关资源
    最近更新 更多