2013-10-07 4 views
-1

CImg에서 좌표 시스템은 맨 위 왼쪽 모서리에서 시작된 것으로 간주됩니다. 그러나 일반적으로 하단 왼쪽부터 시작된 좌표 시스템을 보는데 사용됩니다. 그래서 좌표가 (10,100), (50,50), (100,100)으로 삼각형을 그려야 할 때마다 나는 거꾸로 된 그림을 가지고 있습니다. 이것을 뒤집을 수 있습니까? Expected is 내가이왼쪽 상단 모서리가 아닌 왼쪽 하단 모서리에서 CImg 드로잉을 시작하는 방법은 무엇입니까?

Found is 싶어하지만 난 단순히 가능한 말하면이

+0

@bvalabas, 어떤 도움이 필요합니까? 오, 죄송합니다. 누군가 태그하지 않으면 작동하지 않습니다! – web2dev

답변

2

을 발견 할 때마다 당신은 CIMG에 y 값을 지정, 먼저 당신이 무엇을 원하는에서 좌표계를 뒤집어 야 제공합니다. 아마도이 작업을 수행하는 가장 쉬운 방법은 당신을 위해 y 값을 변환 자신의 함수를 작성하는 것입니다 :

unsigned int flip_y(unsigned int y, unsigned int height) { 
    return height - y; 
} 

이것은 모든 장소는 y을 지정해야됨을 의미를, 당신은을 사용하는 것을 기억해야 할 것 기능 :

img.draw_text(x, y, "hello world!", ...); 
// becomes 
img.draw_text(x, flip_y(y, img.height()), "hello world!", ...); 

당연하게도, 이것은 매우 빠르고 매우 지루한 얻을 것이고, 하나의 상황에서 flip_y를 사용하는 잊어하는 것은 아래로 추적하고 해결하기 위해 소모 매우 시간이 될 수 있습니다.

대안으로 CImg의 자신의 서브 클래스를 만들어 y 값을 원래 CImg 방법에 값을 전달하기 전에 y을 반전 모든 기능을 포장 할 수있다. 이것은 서브 클래스에 대한 참조를 CImg 매개 변수를 예상하는 라이브러리 함수로 전달할 때 작동 할 수 있다는 장점이 있습니다.

많은 그래픽 라이브러리가 이러한 종류의 좌표 시스템을 사용하여 버퍼 주소 지정을 수행하는 것이 훨씬 쉽기 때문에 일반적으로이 스타일의 좌표를 사용합니다. 앞으로 컴퓨터 그래픽 작업을 더 많이 할 계획이라면이 좌표계를 더 수학적으로 사용하려고 시도하는 대신 직접 사용하는 방법을 배우는 것이 좋습니다.

+0

다음과 같아야합니다. return height - y - 1; ? –