2015-01-19 2 views
1

16x16 격자에 사용하려는 모든 텍스처가 포함 된 하나의 큰 PNG 파일이 있습니다. SDL2와 SDL2_Image 라이브러리를 사용하여 하나의 큰 텍스처로로드 할 수 있으며 그 텍스처를 더 작은 텍스처로 잘라내려고했습니다. 이 일을하는 방법이 있습니까?SDL2 텍스처 또는 서페이스 자르기 시도

나는 RenderCopy를 통해 이미지를자를 수 있음을 알고 있습니다. 하지만 프로그램 전체에서 점들에서 텍스처를 수정하려고하므로 하나의 큰 텍스처가 아닌 여러 텍스처 (배열을 생각하고있었습니다)를 다루는 것이 더 쉬울 것입니다.

이렇게하려면 표면을 대신 사용하십시오.

+0

당신은 크기 16 × 16의 텍스처의 배열을 생성하고 난 위키 [여기] (HTTPS에보고했다 – Elvisjames

+0

@Elvisjames SDL_SetRenderTarget' 기능을'사용하여 작은 16 × 16 텍스처에 큰 질감에서 부분을 렌더링 할 수 있습니다 : //wiki.libsdl.org/SDL_SetRenderTarget)하지만 프로그램에서이를 사용하는 방법에 대한 예는 없습니다. 이것을 가장 효과적으로 사용하는 방법에 대한 예를 들려 주시겠습니까? – user2862660

답변

0
SDL_Surface* surf = IMG_Load("Image.PNG"); 
int width = surf->w; 
int height = surf->h; 
int clipPerRow = 16; 
int clipPerColumn = 16; 
SDL_Texture* texture = SDL_CreateTextureFromSurface(RENDERER,surf); 
SDL_FreeSurface(surf); 
SDL_Texture* clip[clipPerRow][clipPerColumn]; 
for(int i=0; i<clipPerRow; i++) 
{ 
    for(int j=0;j<clipPerColumn;j++) 
    { 
     clip[i][j] = SDL_CreateTexture(RENDERER, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, width/clipPerRow, height/clipPerColumn); 
     SDL_SetTextureBlendMode(clip[i][j], SDL_BLENDMODE_BLEND); 
     SDL_Rect rect = {i*width/clipPerRow,j*height/clipPerColumn, width/clipPerRow, height/clipPerColumn}; 
     SDL_SetRenderTarget(RENDERER, clip[i][j]); 
     SDL_RenderCopy(RENDERER, texture, &rect, NULL); 

    } 
} 
SDL_SetRenderTarget(RENDERER, NULL); 
int x= 100; 
int y =100; 
while(!quit){ 
    while(SDL_PollEvent(&e)) if(e.type == SDL_QUIT) quit = 1; 
    SDL_SetRenderDrawColor(RENDERER, 0x00, 0x00,0x00,0x00); 
    SDL_RenderClear(RENDERER); 
    for(int i=0; i<clipPerRow; i++) 
    { 
     for(int j=0;j<clipPerColumn;j++) 
     { 
      SDL_Rect rect = {x+i*width/clipPerRow,y+j*height/clipPerColumn, width/clipPerRow, height/clipPerColumn}; 
      SDL_RenderCopy(RENDERER,clip[i][j],NULL,&rect); 
     } 
    } 
    SDL_RenderPresent(RENDERER); 
}