将一条线变成一个矩形

Mel*_*Mel 9 math graphics vector

我有一个方法,在两点之间画一条线.这很好用,但现在我想把这条线变成一个矩形.

如何获得每个线点左侧和右侧的点,使其成为我可以绘制的矩形?

这几乎就像我需要以某种方式弄清楚如何以编程方式获得垂直线....

And*_*nck 15

我猜你基本上想要胖线?让我们假设该线由两点规定(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();
Run Code Online (Sandbox Code Playgroud)

由于您使用的OpenGL ES我想你必须立即模式渲染(转换glBegin,glEnd等等)来glDrawElements.您还必须将四边形转换为两个三角形.

最后一件事,我有点累,不确定最终的四边形是逆时针还是顺时针,所以当你尝试这个(glDisable(GL_CULL))时,背面剔除.

  • 安德烈亚斯,我必须用(dy)代替(-dy).我认为这是因为你有'y0 + py'而不是'y0-py'. (3认同)
  • @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认同)