gpt4 book ai didi

OpenGL : thick and smooth/non-broken lines *in 3D*

转载 作者:行者123 更新时间:2023-12-03 18:32:51 24 4
gpt4 key购买 nike

我有一个类似 3D CAD 的应用程序,为此我使用了 OpenGL 包装器库 (OpenSceneGraph)。对于应用程序,我试图提出如何呈现的最佳策略 3D 中粗而流畅的线条 .

来自 厚实光滑我的意思是:

  • 线宽可以大于 OpenGL 最大线宽值(在我的机器上似乎是 10.f)
  • 合成折线时,我想避免出现“断线”(见下图示例)

  • OpenGL <code>LineStrip</code> looks broken, zoomed-in image

    目前我使用 GL_LINE_STRIP_ADJACENCY 渲染我的折线.

    我发现有很多关于如何在 2D 中渲染漂亮的线条和曲线的不同资源。不需要太多思考的最简单方法是将线渲染为一组四边形 ( GL_QUAD_STRIP )。这个解决方案的好处是它同时解决了我的两个问题。

    例如,我还发现了这个 nice library这允许实现广泛的线条和曲线外观。它使用三角形进行渲染。

    注意:我不寻求像逐顶点着色或类似画笔的笔触之类的奇特效果,只是 3D 线段 可以有很大的厚度并且与另一条线段很好地连接,它们之间没有任何间隙。

    问题那些 2D 方法是它们是 2D 的。当我改变视点时,很明显我的线条几何图形不是线条,而是位于某些 3D 平面中的 2D“丝带”。我希望它们看起来像 3D 线条。

    想到这个问题,我只能想出以下 接近 :
  • 将线渲染为一组 2D 四边形(三角形),然后使它们始终面向相机
  • 使用一些像圆柱体这样的 3D 形状来表示线段

  • 我不确定这两种解决方案中的任何一种的可行性(我是 OpenGL 的初学者)。我的场景中可能有数百甚至数千条折线。我也想知道是否有更好、更聪明的方法来解决这个问题?我对任何事情都持开放态度,并对最有效的方式感兴趣。谢谢你。

    编辑 :正如用户@rickyviking 所指出的,我没有明确说明我要追求 2D 外观(就像在任何类似 CAD 的应用程序中一样),这意味着:线条的粗细不取决于相机的距离/距离有多远位于从他们。

    更新 :感谢@rickyviking 的回答,我选择了移动方向 - 几何着色器。我仍然没有完整的解决方案,但可能会在达到结果时发布最终更新和最少代码,请点击此处。

    最佳答案

    我最终按照其中一个答案的建议使用了几何着色器。主要想法是将每条线段转换为三角形 strip ,并确保它始终面向相机且厚度保持不变。

    我也写了一个blog post关于实现细节。如果有人觉得有用,我将着色器代码放在 one of my github repos 上(该代码还提供了有关如何使用相同技术绘制粗而平滑的 Bezier 曲线的示例)。

    以下是一些结果截图(绿线是使用着色器绘制的,红色是使用 GL_LINE_STRIP_ADJACENCY 绘制的):

    same thickness example

    bigger thickness example

    请注意与绿色线相比,红线的相邻线段之间的间隙。

    两条贝塞尔曲线(均使用着色器绘制):

    Bezier curve examples

    关于OpenGL : thick and smooth/non-broken lines *in 3D*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36655888/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com