2D 좌표 체계에 대한 문의

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
spiderman
Posts: 13
Joined: 2007-09-13 17:12

2D 좌표 체계에 대한 문의

Post by spiderman »

2D 좌표 체계에 대한 문의를 드리겠습니다.

2D 상에서 모든 좌표는 0,0 부터 시작을 하는 것으로 알고 있습니다.
2D Library에서 DrawRect의 interface가 left, top, right, bottom를 인자로 받아 Drawing을 할경우

만약 인자로 전달하기 전에 x, y, width, height로 전달 받아
이것은 left, top, right, bottom으로 아래와 같이 변환합니다.

left = x
top =y
right = x + width - 1
bottom = y + height - 1
위와 같이 변환하여 전달 합니다. 그리고 -1을 하는 것은 0 Base에 대한 처리 사항입니다.
0을 고려해서 좌표에서 일정량의 길이를 더하거나 빼서 새로운 좌표를 얻는 경우 -1 ,
두 좌표 간의 거리를 통해 길이를 얻는 경우 + 1을 합니다.

위와 같이 전달 하였을 경우 대부분의 2D Library에서는 1px을 덜 그립니다.

2D Graphic Library에서 잘 못하는 것은 아닌거 같고, 좌표 전달에 문제가 있는 것으로 보이는 것 같은데
0을 고려하면 상황에 따른 +1, -1이 필요 합니다.

이것이 어떤 2D Graphic의 규칙에 의해서 이렇게 처리는 것인지에 대해서 자료 찾아 보았으나,
기본 지식이 미천한 관계로 원하는 답을 찾지 못 하였습니다.

왜 이런 결과가 나오는 알려 주시면 감사하겠습니다.
tomatowax
Posts: 464
Joined: 2005-01-17 12:22
Contact:

Post by tomatowax »

흠...

WinAPI 의 DrawRect 가 Rect 를 받으면서 주어진 좌표를 포함하도록 그리게 하기 위해서 width 란 개념에 -1 이 붙은 것 같은데요

0 Base 라기보다 2D 뿐 아니라 모든 좌표계 및 수학의 원점이 0 기준입니다.

말씀하신 1px 덜 그리는 경우는 인자를 width 로 받는지 rect 로 받는지의 기준 차이 같습니다.

상황에 따라 +1 은.. rect 출력시 0 에 width 0 을 넘겨준 예외적인 상황 같은 경우를 말씀하신 것 같은데요

사실 Rectangle 이라는 개념 자체는 그리기 위해서 width 가 2 이상 주어지는 것이 맞습니다.

width 가 1 은 사실 Point 쪽에 가깝고, width 1 Rect 를 지원하는 것은 라이브러리 마다 다르겠지만 예외적인 경우라고 할 수 있겠네요.

도움이 되셨기를요~ :)2
Zeprod
Posts: 480
Joined: 2006-11-04 16:24
Location: Creaty Networks
Contact:

Post by Zeprod »

처음 윈도우 생성시 넣어주는 크기와 실제 내용판의 크기는 조금 다를 수 있습니다.

아마 그것때문에 임시보정을 해준게 아닌가 싶네요.



윈도우 UI 테마에 따라서 외곽 여분이 차지하는 크기도 달라지기 때문에

정확한 크기를 얻기 위해서는 이를 다시 계산해줘야 하는 것으로 알고 있습니다.
세상이 기다리는 나만의 SHOW!
----------------------------------------------
Zeprod 홈 : http://Zeprod.org
Project. Creaty : http://Creaty.net/
Creaty 게임제작 커뮤니티 : http://Creaty.net/game/
----------------------------------------------
bugSlayer
Posts: 29
Joined: 2006-12-18 18:41
Location: 모 업체

Re: 2D 좌표 체계에 대한 문의

Post by bugSlayer »

spiderman wrote: 그리고 -1을 하는 것은 0 Base에 대한 처리 사항입니다.
이게 무슨 말씀인지 잘 모르겠네요. 혹시 화면상의 좌표가 0, 0 이라는것을 0 Base라고 하신거라면
이건 신경쓰지 마시고 계산하시면 됩니다.

left = x;
top = y;
right = x + width;
bottom = y + height;

대부분의 2D 라이브러리에서 1 픽셀을 덜 그리는 이유는 질문자님께서 right, bottom 에 각각 -1 을
해줬기 때문이라고 생각됩니다.
spiderman wrote: 2D Graphic Library에서 잘 못하는 것은 아닌거 같고, 좌표 전달에 문제가 있는 것으로 보이는 것 같은데
0을 고려하면 상황에 따른 +1, -1이 필요 합니다.
똑같은 이야기지만, 0을 고려하지 마시고 그냥 계산 결과값을 가져다 쓰시면 됩니다.
게임 만들어요~
Locked