我有一个绘制两点间线段的方法。这很有效,但现在我想把这条线变成一个矩形。
如何获取每个线段点左侧和右侧的点,以使其成为一个可以绘制的矩形?
似乎需要编程方式计算出垂直线....
我猜你想要的是粗线条?假设这条线由两个点(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)
)。
glVertex2f
方法中“x”参数的符号以匹配“y”参数的符号。 glVertex2f(x0 + px,y0 + py); glVertex2f(x1 + px,y1 + py); glVertex2f(x1-px,y1-py); glVertex2f(x0-px,y0-py);
- Ryan Clarke既然你使用了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)
drawRect(x,y,w,h)
tl = (x,y) tr = (x+w, y) br = (x+w, y+h) bl = (x, y+h)
绘制矩形(x,y,w,h)
左上角 = (x,y) 右上角 = (x+w, y) 右下角 = (x+w, y+h) 左下角 = (x, y+h)