OpenGL 3.2核心配置文件glLineWidth

时间:2012-01-09 16:17:09

标签: opengl osx-lion

我在Mac OS X上设置了一个OpenGL 3.2 Core环境。我希望能够在屏幕上绘制一些厚黑色的喜欢。在以前版本的OpenGL中,我可以设置

glLineWidth(10.0f);

我会得到一条10像素宽的线。但是当我检查3.2 Core

中的线宽范围时
GLint range[2];
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range);
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range);

对于别名线,我得到1的值,对于平滑线,我得到0-1。如何在屏幕空间中创建一个10.0像素宽的线?除了使每个线段成为矩形之外,还有一种简单的方法来绘制它吗?

3 个答案:

答案 0 :(得分:7)

使用OpenGL 3.2核心配置文件,使用大于1.0的值调用 glLineWidth 会产生INVALID_VALUE错误(调用 glGetError 来证明它)。

当然,你可以通过确定画线所需的四边形来获得想要的结果。

我认为你应该能够从线点生成四边形:嘿,更大的线是四边形!也许你可以使用像this这样的技术来获得你想要的结果。

关键是:不是依赖LineWidth,而是将单位四边形作为输入(使用三角形条带的四个顶点),然后将着色器内的传入顶点变换为适当的制服。

也许另一种方法是使用几何着色器渲染:从一个点生成四边形。但是,我不确定这一点。我不知道几何着色器(当然只有在可行的情况下)才是最佳方法:使用单个四边形绘制线条的成本将是构成条带的每条线的着色器均匀设置。

答案 1 :(得分:1)

这可能取决于您设置的投影类型。您使用的是正交投影矩阵吗?

我认为如果你没有使用正交投影,那么图元的最终光栅化将受到物体(模型矩阵)与相机(视图矩阵)的距离的影响。

干杯

答案 2 :(得分:0)

线宽> 1.0已弃用,并且在核心配置文件OpenGL Context中不再受支持。
但是,它仍然保留在兼容性配置文件上下文中。

请参见OpenGL 4.6 API Core Profile Specificatio - E.2.1 Deprecated But Still Supported Features

不推荐使用以下功能,但仍在核心配置文件中提供。他们 可能会从OpenGL的未来版本中删除,并在实现核心配置文件的前向兼容上下文中删除。

  • 宽线-LineWidth值大于1.0会产生INVALID_VALUE错误

对于核心配置文件上下文,可能的解决方案在以下答案中给出:
OpenGL Line Width
GLSL Geometry shader to replace glLineWidth
Drawing a variable width line in openGL (No glLineWidth)
OpenGL : thick and smooth/non-broken lines in 3D