如何使用gluCylinder有效地绘制3D线?

时间:2014-04-29 21:00:54

标签: 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 *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?

1 个答案:

答案 0 :(得分:1)

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

看看这里:Wide lines in geometry shader behaves oddly