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-file)를 내 gameobjects에 전달하고 그것을 다시 칠해 모델에 적용했다. 어느 것이 잘 작동합니다. 텍스처 압축기와 mimap에 대한 지식이 없습니다. 몇 가지 조사를 해보 겠지만 더 이상 필요하지 않습니다. 감사! :) – J4stM4rt