glLineWidth保证只支持宽度1。在Windows上,它被限制为10宽度。为了克服这个限制,常见的建议是“简单地”呈现一个矩形。
因为这似乎是一种基本要求(呈现任意宽度的2D/3D线条、网格线框等),我想知道是否有人为其提供了代码片段。
它的工作方式类似于遗留的OpenGL提供的功能。输入:两个三维点和宽度。输出:它将呈现一条以像素为单位面向摄像机的3D线。
重点:
因为它是一条3D (平面)线,所以没有正确定义这些属性。所以,我想应该是“尽可能多”和“平均”(不管这意味着什么)。这可能就是为什么glLineWidth是有限的。
发布于 2019-12-30 22:31:51
一些基本的,不能回答细微差别的东西,目前对我来说已经足够了(目前,只有二维线,对于给定的世界厚度):
GLUquadricObj *pQuadric = gluNewQuadric();
glPushMatrix();
// flatten y to make a rectangle
glm::dmat4 S = glm::scale( glm::dvec3(1., 0.001 / radius, 1.) );
// translate
glm::dmat4 T = glm::translate( toPoint<glm::dvec3>(p0) );
// rotate
glm::dvec3 xaxis(1, 0, 0);
glm::dmat4 R1 = glm::rotate( -M_PI / 2, xaxis );
glm::dvec3 u( toPoint<glm::dvec3>(p1 - p0) );
u = glm::normalize( u );
glm::dvec3 yaxis(0, 1, 0);
glm::dmat4 R2 = glm::orientation(u, yaxis);
// combine transforms
glm::dmat4 A = T * R2 * R1 * S;
glMultMatrixd( (double*)&A[0] );
glGetDoublev(GL_MODELVIEW_MATRIX, (double*)&A[0]);
gluCylinder(pQuadric, radius, radius, height, 4, 1);
glPopMatrix();
gluDeleteQuadric(pQuadric);https://stackoverflow.com/questions/59527092
复制相似问题