2017-01-20 6 views
1

AccessViolationExcpetionsの原因であるtexture.GetDataに問題があります。XNA .GetDataはモデルのAccessViolationExceptionsテクスチャを返します

私は、次のような何かをしようとしている:

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で(データ)はスローAccessViolationException、apparantly私はモデルのテクスチャを読み取ることはできませんか? 誰かがこれを修正する方法を知っていますか?

ロードされたテクスチャで試してみると、すべてうまく動作しますが、多くの異なるモデルを扱っているためです。モデルが必要とするテクスチャを見つけて、そのテクスチャを再現して適用するのは面倒です。

答えて

0

テクスチャの形式は何ですか?ミームマップはありますか?

通常のモデルでは、処理後にミップマップを使用して圧縮テクスチャを使用すると予想されます。そのため、GetDataに渡す配列はおそらく間違った型と間違った長さです。

モデルプロセッサでミップマップの生成とテクスチャ圧縮を無効にできる場合は、この問題を直ちに解決してください。しかし、圧縮とミップマップが必要な場合は、この作業を行うためのソリューションはもっと複雑になります。

+0

あなたの答えをありがとう。一方、私は、この問題を回避するために、テクスチャ(pngファイル)を自分のgameオブジェクトに渡し、それを色付けしてモデルに適用することで作業しました。どちらがうまくいくの?私は、テクスチャ圧縮器とミックスについての知識がありません。そのティエムについていくつかの調査をしますが、それはもはや必要ありません。ありがとう! :) – J4stM4rt

関連する問題