2009-12-20 2 views
7

두 점 사이에 선을 그리는 방법이 있습니다. 이것은 꽤 잘 작동하지만, 이제이 선을 직사각형으로 만들고 싶습니다.선을 직사각형으로 바꾸기

각 선 점의 왼쪽과 오른쪽에 점을 가져 와서 그릴 수있는 사각형으로 만들려면 어떻게해야합니까?

그것은 거의 I 든 ...., 프로그램 수직선을 얻는 방법을 알아 내야 것처럼

+1

조심해! IBM 특허! http://www.forbes.com/asap/2002/0624/044.html –

+3

그건 미친 짓이야 ... 뚱뚱한 사람들은 모두 무료 여야 해. – Mel

+0

나는 이것을 설명하는 것을 엉망으로 만들었을지도 모른다. 선은 직사각형의 가운데에 있습니다. 그래서 대각선이 아닌 세로로 반으로 자르는 선이있는 사각형을 상상하십시오. – Mel

답변

13

을 GL_LINES와 사각형을 만들기 위해를 perserve해야합니다 나는 당신이 기본적으로 지방이 줄을 원하는 같은데요? 두 지점 (x0, y0)(x1, y1)에 의해 지정되는 라인을 가정하자 우리는 다음과 같습니다

float dx = x1 - x0; //delta x 
float dy = y1 - y0; //delta y 
float linelength = sqrtf(dx * dx + dy * dy); 
dx /= linelength; 
dy /= linelength; 
//Ok, (dx, dy) is now a unit vector pointing in the direction of the line 
//A perpendicular vector is given by (-dy, dx) 
const float thickness = 5.0f; //Some number 
const float px = 0.5f * thickness * (-dy); //perpendicular vector with lenght thickness * 0.5 
const float py = 0.5f * thickness * dx; 
glBegin(GL_QUADS); 
glVertex2f(x0 + px, y0 + py); 
glVertex2f(x1 + px, y1 + py); 
glVertex2f(x1 - px, y1 - py); 
glVertex2f(x0 - px, y0 - py); 
glEnd(); 

당신이 당신이 즉시 모드 렌더링 (glBegin, glEnd 등)으로 변환해야합니다 생각의 OpenGL ES를 사용하고 있기 때문에 glDrawElements. 또한 쿼드를 두 개의 삼각형으로 변환해야합니다.

마지막으로 한 가지, 결과 쿼드가 반 시계 방향인지 또는 시계 방향인지에 대해 조금 피곤하고 불확실하므로 시도해 볼 때 뒤쪽면 컬링을 설정하십시오 (glDisable(GL_CULL)).

+3

Andreas, (dy)로 (-dy)를 대체해야합니다. 내 생각에 그 이유는 'y0 + py'가 아니라 'y0 - py'. – ChrisJJ

+0

추신 : 여기에 사각형 끝이있는 버전이 있습니다. http://pastebin.com/KQMc6jp5 – ChrisJJ

+2

@ChrisJJ 맞습니다. 답을 고치려고했지만 편집이 거부되었습니다. glVertex2f 메소드의 'x'매개 변수의 부호를 'y'매개 변수의 부호와 일치하도록 변경하십시오. 'glVertex2f (x0 + px, y0 + py); glVertex2f (x1 + px, y1 + py); glVertex2f (x1-px, y1-py); glVertex2f (x0 - px, y0 - py); ' –

-2

의 drawRect (X, H, Y w)

TL = (X, Y) TR = (X + Y, w) BR = 당신은 내가 가정합니다 taged OpenGL은이 질문을 한 이후 BL = (X, Y + H)

-1

(X +, Y + H w) OpenGL에 가까운 솔루션을 원합니다.

알고 계시 겠지만 두 줄의 점이 있습니다. x1, y1과 x2, y2를 호출 할 수 있습니다.

또한 x1, y1이 왼쪽 상단 점이고 x2, y2가 오른쪽 하단이라고 가정하십시오. 플롯에

귀하의 4 점은 수 [당신은)

Height:y1-y1 
Width: x2-x1 

(x1, y1) 
(x1+width, y1) 
(x2, y2) 
(x2-width, y2) 
관련 문제