2012-11-04 6 views
1

현재 현 아이디어에 비해 좀 더 효율적인 순간에 다른 해결책을 찾을 수없는 문제가 있습니다.무작위로 생성 된 선들로 텍스처 분리하기

무작위로 생성 된 경로를 따라 움직이는 XNA로 약간의 게임을 만들었지 만 선이 무작위로 생성되기 때문에 위와 아래의 선을 분리하는 방법을 알지 못합니다. 나는이 이미지가 문제를 설명 할 수 있기를 바랍니다 :

enter image description here

그래서 라인 (들)이 무작위로 추가됩니다. 내 자신의 생각은 서로 다른 높이의 직사각형을 많이 만들고 서로 옆에 배치하는 것이 었습니다. 그러나 이는 다소 비효율적 인 것으로 생각되며 선이 더 두꺼워서 직사각형이 조금 넓어 질 수 있습니다. 1 ~ 2 픽셀 밖에 없습니다. 그렇지 않으면 라인 근처에 "emtpy"지점이 표시 될 수 있습니다.

불명확 한 점이 있으면 언제든지 물어 보시고 질문에 추가하겠습니다. 그러나 제 문제는 충분히 명확해야합니다.

+0

라인을 어떻게 표현하고 있습니까? – neeKo

+0

선은 작은 이미지 (예 : 10x30 픽셀)로 생성되며 다른 이미지 옆에 생성되어 임의의 각도로 회전하고 서로 옆에 배치됩니다. – phil13131

+0

추가 : 회전 각도는 아마도 -0.2 ~ 0.2 rad이고 두 개의 인접 선 회전 각도 차이는 0.1 rad보다 크지 않습니다 – phil13131

답변

2

당신은 당신이 투명 픽셀 필요하지 않습니다 픽셀을 대체 할 수있다.

+0

아주 좋은 아이디어, 나는 컴퓨터가 30fps를 유지하기 위해 충분히 빨리 그것을 할 수 있기를 바란다. – phil13131

1

이 문제의 한 가지 해결책은 선택한 영역 외부의 텍스처를 가려주는 마스킹 텍스처를 만드는 것입니다.

mad skills incoming!

흑색 영역

그려되지 않는다. 다른 질감에 대해 반대를 수행하면 원하는 것을 얻을 수 있습니다.

어떻게 spritebatch로 작업할지 모르겠지만 문제의 일반적인 해결책은 아마도 마스크를 사용하는 것입니다. 당신은 심지어 바닥 하나 이렇게해야 바로 위에 상단을 그리지 않는

//extract pixel data from texture 
Texture2D topTexture = ... 
Color[] topTextureData = new Color[topTexture.Width * topTexture.Height]; 
topTexture.GetData<Color>(topTextureData); 

for(int x = 0; x < topTexture.Width; x++) 
{ 
    //depending on how you represent lines, set transparent all the pixels at and below line 
    //basically, for each x dimension, you find where the line is - you have to 
    //write the method for getting this y, as I don't know how you represent lines 
    int lineY = GetLineYAtThisX(x); 

    //all the pixels at (and below) the line are set transparent 
    for(int y = lineY; y < topTexture.Height; y++) 
    { 
     topTextureData[x + y * topTexture.Width] = Color.Transparent; 
    } 
} 

//save this data into another texture, so you don't ruin the original one. 
Texture2D maskedTopTexture = new Texture2D(GraphicsDevice, topTexture.Width, topTexture.Height); 
maskedTopTexture.SetData<Color>(topTextureData); 

:

+0

문제는이 마스크를 무작위로 생성해야합니다. XNA를 사용하여 그렇게합니까? – phil13131

+0

렌더링 된 텍스처 (또는 전체 게임 화면)를 Texture2D에 저장하는 방법이 있습니다. [이 질문의 대답]을보십시오 (http://stackoverflow.com/a/11943483/1306322) – user1306322

+0

하지만 다시 나는 라인 아래에 맞는 검은 질감을 만들어야합니다. 그것이 전체적인 문제입니까, 아니면 그것을 할 생각이 있습니까? 지금은 조금 복잡해 보입니다. – phil13131

관련 문제