Opengl 如何使用gluCylinder高效地绘制三维线?

Opengl 如何使用gluCylinder高效地绘制三维线?,opengl,Opengl,我有一段代码,在两点之间画一条3D线: void glLine(Point3D (&i)[2], double const width, int const slices = 360) { double const d[3] = { i[1].X - i[0].X, i[1].Y - i[0].Y, i[1].Z - i[0].Z }; glMatrixMode(GL_MODELVIEW); glPushMatrix(); GLUquadric *cons

我有一段代码,在两点之间画一条3D线:

void glLine(Point3D (&i)[2], double const width, int const slices = 360)
{
    double const d[3] = { i[1].X - i[0].X, i[1].Y - i[0].Y, i[1].Z - i[0].Z };
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    GLUquadric *const quadric = gluNewQuadric()
    double z[3] = { 0, 0, 1 };
    double const angle = acos(dot(z, d) / sqrt(dot(d, d) * dot(z, z)));
    cross(z, d);
    glTranslated(i[0].X, i[0].Y, i[0].Z);
    glRotated(angle * 180 / M_PI, z[0], z[1], z[2]);
    gluCylinder(quadric, width / 2, width / 2, sqrt(dot(d, d)), slices, 1);
    glPopMatrix();
    gluDeleteQuadric(quadric);
}
问题是,它非常慢,因为数学计算从单位z向量到给定方向的旋转


如何让OpenGL(希望是GPU)代替CPU执行算法?

不要使用圆柱体渲染线。而是使用几何体着色器渲染四边形,以正确的屏幕空间缩放面向用户


看看这里:

您可以使用带有线条的几何体着色器作为三角形的输入和输出,但最快的方法是构造顶点数组。首先创建一个显示列表,改进可能足以满足您的需要谢谢您的答案!不幸的是,我完全不知道几何体着色器是如何工作的,因为我是一个图形新手。。。他们需要一种全新的语言吗?(代码看起来不像C++)它们需要一个新编译器吗?或者我可以调用OpenGL函数来编译代码吗?几何体着色器是着色器的一种特殊形式。着色器是在图形卡上运行的程序,用于控制渲染。它们是最先进的渲染方式。(与仅使用固定功能管道相比)。这些小程序从应用程序加载,并针对给定的绘图调用执行。对于该语言,在opengl的情况下,您将使用glsl(或cg)作为着色语言。这可能是开始学习使用着色器进行简单渲染的教程的最佳方式。没问题。此外,如果您真的只想渲染线。使用glBegine(GL_线)并将填充模式设置为line: