2014-07-14 13 views
1

AsphyreSphinx 프레임 워크를 사용하여 2D 캔버스에서 2D DirectX 장면을 그립니다. 그들의 포럼이 닫혀 있기 때문에, 나는 여기에 도움을 청해야한다. 나는이 같은 캔버스를 형성하기 위해 이미지를 그리기 오전 :AsphyreSphinx - 이미지의 채도를 낮추는 방법

DXCore.Canvas.UseImage(TableResources.TableImage, TexFull4); 
DXCore.Canvas.TexMap(FMetrics.RawTableBounds, clWhite4); 

TableResources.TableImageTAsphyreImage 타입이다. DXCore.CanvasTAsphyreCanvas입니다. 이 작동하고 적절한 이미지를 그립니다. 그러나, 나는 또한 동일한 이미지의 검은 색을 & 흰색으로 그릴 필요가있다.

나는 다양한 매개 변수 조합을 TexMap()에 사용하려고 시도했지만 아무것도 흐려지지 않은 이미지에 근접한 것은 아무것도주지 못했습니다. 어떤 것들은 내가 노력 : TBlendingEffect 열거 소요 함수 4 매개 변수가있다

DXCore.Canvas.TexMap(FMetrics.RawTableBounds, cGray4(100)); 
DXCore.Canvas.TexMap(FMetrics.RawTableBounds, cRGB4(100, 100, 100)); 

, 나도 그 다양한 조합을 시도했지만 성공하지.

은 또한 수동으로 다음과 같이 cLerp()과 그것을로드 한 후 이미지를 채도하려고 : (하나 개의 이미지를 처리하기 위해 ~ 20~30초)이 ..하지만
procedure TTableResources.ImageToGrayscale(const AImage: TAsphyreImage); 
var 
    C1: Integer; 
    x, y: Integer; 
begin 
    for C1 := 0 to AImage.TextureCount - 1 do 
    for x := 0 to AImage.Texture[C1].Width - 1 do 
     for y := 0 to AImage.Texture[C1].Height - 1 do 
     AImage.Texture[C1].Pixels[x, y] := cLerp(AImage.Texture[C1].Pixels[x, y], cColor(cGrayValue(AImage.Texture[C1].Pixels[x, y])), 0.8); 
end; 

이 awfuly 느린 작동

및 나던 반환 원하는 출력.

Asphyre.Types

Asphyre.Canvas

사람이에 대한 자세한 뭔가를 알고 있나요 내게 내가 시도 할 수 있습니다 얼마나 힌트 또는 조언을 줄 수 있습니다

여기에 그들의 도움에서 일부 문서는 무엇입니까?

답변

1

아스 파이어 스핑크스는 이미지 처리가 아니라 렌더링을 위해 설계되었습니다. 게임을 만들기에 적합한 그래픽 엔진입니다.

원래 개발자가 작업을 중단했습니다. 현재 MarcosCestari라는 파스칼 게임 개발 커뮤니티 회원이 관리하고 있습니다. Asphyre Sphinx와 관련된 질문이 있으시면 PGD 커뮤니티에 가입하여 질문하십시오. 이들은 Asphyre Sphix 라이브러리를 위해 예약 특별 포럼 섹션 :

http://www.pascalgamedevelopment.com/forumdisplay.php?25-Asphyre-Component-Pack-(formerly-PowerDraw)

이제 대신 예를 들어 Graphics32 같은 몇 가지 이미지 처리 라이브러리 것이 필요.

+0

명예를 당신에게. 그런 하위 포럼이 정말로 기쁘다. –

+0

우리는 파스칼 게임 개발자가 개발하고 사용하는 대부분의 그래픽 엔진 전용 서브 포럼을 보유하고 있습니다. 주된 이유는 포럼을 잘 조직하는 것입니다. 같은 라이브러리는 다른 라이브러리에도 그대로 적용됩니다. Delphi/Objective Pascal을 사용하여 게임을 만드는 데 관심이있는 분이라면 언제든지 저희와 함께하십시오. 그리고 게임 엔진이 기본적으로 처음부터 어떻게 만들어 지는지보고 싶거나 그런 게임 엔진을 만드는 데 기여하려면 꼭 모든 사람들과 함께하십시오. 우리는 우리 자신의 공동체 게임 엔진을 스스로 창조하는 과정에 있습니다. – SilverWarior

0

내 자신의 질문에 답하기 위해 그것을 채도를 낮추는 방법을 알아 냈습니다. 전화했을 때이 기능은 그레이 스케일로 변환됩니다

procedure DesaturateImage(const AImage: TAsphyreImage); 
type 
    PPixelRec = ^TPixelRec; 
    TPixelRec = packed record 
    B: Byte; 
    G: Byte; 
    R: Byte; 
    A: Byte; 
    end; 
var 
    C1, x, y: Integer; 
    bitsp: pointer; 
    pitch: Integer; 
    bytes_per_pixel: Integer; 
    pixel: PPixelRec; 
    gray_value: Byte; 
begin 
    for C1 := 0 to AImage.TextureCount - 1 do 
    begin 
    AImage.Texture[C1].Lock(Rect(0, 0, AImage.Texture[C1].Width, AImage.Texture[C1].Height), bitsp, pitch); 
    try 
     bytes_per_pixel := pitch div AImage.Texture[C1].Width; 
     for y := 0 to AImage.Texture[C1].Height - 1 do 
     for x := 0 to AImage.Texture[C1].Width - 1 do 
     begin 
      pixel := PPixelRec(Integer(bitsp) + y * pitch + x * bytes_per_pixel); 
      gray_value := Round(0.30 * pixel^.r + 0.59 * pixel^.g + 0.11 * pixel^.b); 
      pixel^.r := gray_value; 
      pixel^.g := gray_value; 
      pixel^.b := gray_value; 
     end; 
    finally 
     AImage.Texture[C1].Unlock; 
    end; 
    end; 
end;