【问题标题】:OpenGL 3.2 Core Profile glLineWidthOpenGL 3.2 核心配置文件 glLineWidth
【发布时间】:2012-01-09 16:17:08
【问题描述】:

我正在 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 的 Aliased Lines 值和 0-1 的 Smooth 线值。如何在屏幕空间中制作 10.0 像素宽的线条?除了将每个线段设为矩形之外,还有其他简单的方法来绘制吗?

【问题讨论】:

    标签: opengl osx-lion


    【解决方案1】:

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

    通过确定绘制线条所需的四边形,您当然可以得到想要的结果。

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

    关键是:不是依赖 LineWidth,而是给一个单位四边形作为输入(使用三角形带的 4 个顶点),然后在着色器中转换传入的顶点,并传递给它适当的制服。

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

    【讨论】:

    • 看起来最好/唯一的方法是通过初始几何或几何着色器绘制完整的几何以太。
    【解决方案2】:

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

    我认为,如果您不使用正交投影,则图元的最终光栅化将取决于对象(模型矩阵)与相机(视图矩阵)的距离。

    干杯

    【讨论】:

    • 我正在使用正交投影。
    【解决方案3】:

    不推荐使用 > 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2023-04-10
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多