我有一個方法可以在兩點之間畫一條線。這工作得很好,但現在我想把這條線變成一個矩形。將一條線變成一個矩形
我怎樣才能得到每個線點的左側和右側的點,使其成爲一個矩形,我可以繪製?
這幾乎就像我需要以某種方式弄清楚如何讓編程垂線....
我有一個方法可以在兩點之間畫一條線。這工作得很好,但現在我想把這條線變成一個矩形。將一條線變成一個矩形
我怎樣才能得到每個線點的左側和右側的點,使其成爲一個矩形,我可以繪製?
這幾乎就像我需要以某種方式弄清楚如何讓編程垂線....
我猜你基本上要肥胖紋?讓我們假設由兩個點(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();
由於您使用的OpenGL ES我想你必須立即模式渲染(glBegin
,glEnd
等)轉化爲glDrawElements
。您還必須將四邊形轉換爲兩個三角形。
最後一件事,我感到有點疲倦,並且不確定產生的四邊形是逆時針還是順時針方向旋轉,所以當您嘗試這樣做時背面剔除會變爲(glDisable(GL_CULL)
)。
Andreas,我必須用(dy)替換(-dy)。我想那是因爲你有'y0 + py'而不是'y0 - py'。 – ChrisJJ 2013-03-06 02:30:55
PS這裏有一個方形端蓋的版本:http://pastebin.com/KQMc6jp5 – ChrisJJ 2013-03-06 02:39:02
@ChrisJJ是對的,我試圖修復答案,但編輯被拒絕。更改'glVertex2f'方法的'x'參數的符號以匹配'y'參數的符號。 'glVertex2f(x0 + px,y0 + py); glVertex2f(x1 + px,y1 + py); glVertex2f(x1-px,y1-py); glVertex2f(x0 - px,y0 - py);' – 2017-02-12 00:15:47
的drawRect(X,Y,W,H)
TL =(X,Y) TR =(X + W,Y) BR =(X + W,Y + H) BL =(X,Y + H)
既然你問用OpenGL這個問題的功能標籤,我會承擔您希望獲得接近OpenGL的解決方案。
正如你所知,你有兩點構成一條線。讓我們稱他們爲x1,y1和x2,y2
我們還假定x1,y1是左上角的點,而x2,y2是右下角。
你4點劇情將是[你需要持之以恆爲了與GL_LINES矩形)
Height:y1-y1
Width: x2-x1
(x1, y1)
(x1+width, y1)
(x2, y2)
(x2-width, y2)
小心,IBM有專利! http://www.forbes.com/asap/2002/0624/044.html – 2009-12-20 20:46:49
這是瘋了...胖的線應該是免費的每個人 – Mel 2009-12-20 21:07:23
我可能已經搞砸了解釋這裏。該線在矩形的中間。所以想象一個矩形,用一條線將其縱向切成兩半,而不是對角線。 – Mel 2009-12-20 21:08:23