2014-07-24 5 views
3

앤티 앨리어싱을 활성화 한 상태에서 여러 텍스처를 함께 사용하려고하면 텍스처가 회전하지 않으면 잘 작동하지만 텍스처를 회전하면 앤티 앨리어싱에서 "테두리 "질감의 가장자리에. 아래는 예입니다.텍스처가 SDL2에 의해 회전 된 경우 올바르게 적용되지 않았습니다.

원본 질감, 중간에 50x50 픽셀의 파란색 사각형이있는 100x100 픽셀 이미지. 그대로 45도 회전 :

original texture

나는 두 번이 텍스처를 렌더링하고 있습니다. 회전 질감의

result picture

참고 회색 틱 국경 : 그것은 다음과 같은 결과를 생성합니다. 내 의견으로는 상단에있는 텍스처는 둘 다 동일한 색상의 픽셀을 포함하기 때문에 하단의 텍스처와 자연스럽게 조화를 이루어야합니다. 앤티 앨리어싱이 비활성화 된 경우 텍스처가 예상대로 테두리없이 혼합되지만 분명히 회전 된 텍스처에 앤티 앨리어스를 적용하려고합니다.

안티 앨리어싱 텍스처와 원활한 블렌딩을 모두 달성 할 수있는 방법이 있습니까?

SDL2 및 OpenGL로 렌더링 중입니다. 다음은이 효과를 보여주는 예제 프로그램입니다.

#include <assert.h> 

#include <SDL2/SDL.h> 
#include <SDL2/SDL_image.h> 

void render(SDL_Renderer *renderer, SDL_Texture *tex) { 
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF); 
    SDL_RenderClear(renderer); 

    SDL_Rect dst_rect = { 0, 0, 100, 100 }; 

    SDL_RenderCopyEx(renderer, tex, 0, &dst_rect, 
     0, 0, SDL_FLIP_NONE); 
    SDL_RenderCopyEx(renderer, tex, 0, &dst_rect, 
     45, 0, SDL_FLIP_NONE); 

    SDL_RenderPresent(renderer); 
} 

int main() { 
    SDL_Window *window; 
    SDL_Renderer *renderer; 

    SDL_Init(SDL_INIT_VIDEO); 
    SDL_CreateWindowAndRenderer(100, 100, SDL_WINDOW_OPENGL, &window, &renderer); 

    /* comment the following line for blended images */ 
    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "best"); 

    SDL_Texture *tex = IMG_LoadTexture(renderer, "./sample.png"); 
    assert(tex != 0); 

    SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_BLEND); 

    render(renderer, tex); 

    SDL_Event event = { 0 }; 
    while (1) { 
     if (SDL_PollEvent(&event) == 0) { 
      SDL_Delay(100); 
      continue; 
     } 

     if (event.type == SDL_QUIT) { 
      SDL_Quit(); 
      break; 
     } 
    } 

    return 0; 
} 

편집이 : 내가 SDL_RenderCopyEx의 내부에 45도 질감을 회전하는 경우, 그것은 다른 색상의 반투명 테두리를 추가하는 것을 발견했습니다, 아래 그림을 참조하시기 바랍니다.

enter image description here

참고 방법 회전 된 이미지의 가장자리 주위에 색상 변경.

+0

첫 번째 예는 회색 색상을 가지고 있지 않지만, 파란색의 다른 그늘 그런 다음 예상대로 혼합 된 이미지를 생성합니다. 초의 예는 파란색의 세 가지 다른 음영으로 밝은 색 (큐브)에서 어두운 색 (검정색 배경)으로 테두리를 만듭니다. – this

+0

당신은 절대적으로 옳습니다. 회색으로 보입니다. 그러나 실제로는 파란색의 다른 색조입니다. 다른 파란색이지만 원본 파란색은 # 87ceeb이지만 # 6aa2b9로 변환됩니다 - 반투명 한 # 87ceeb 대신 어두운 파란색을 사용하고 동일한 색상의 기본 픽셀과 혼합해야합니다. – plasmatron

+0

다른 배경을 시도해보십시오. – this

답변