我有这个代码在两点之间绘制一条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?
答案 0 :(得分:1)
不要使用圆柱渲染线条。而是使用几何着色器渲染四边形,面向用户正确的屏幕空间缩放。