OpenGL 3.2核心配置文件glLineWidth

use*_*069 9 opengl osx-lion

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

glLineWidth(10.0f);
Run Code Online (Sandbox Code Playgroud)

我会得到一个10像素宽的线.但是当我检查3.2 Core中的线宽范围时

GLint range[2];
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range);
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range);
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*uca 7

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

当然,您可以通过确定绘制线所需的四边形来获得所需的结果.

我认为你应该能够从线点生成四边形:嘿,更大的线是四边形!也许你可以使用像techinques 让你想要的结果.

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

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