【问题标题】:point rendering in openGL and GLSLopenGL 和 GLSL 中的点渲染
【发布时间】:2011-12-30 20:53:35
【问题描述】:

问题:如何使用 GLSL 在 openGL 中渲染点?


信息:不久前,我在 python 中进行了重力模拟,并使用搅拌器进行渲染。它看起来像this。作为一个练习,我将它移植到 openGL 和 openCL。我想我实际上已经在 openCL 中工作了。直到我花了相当多的时间在 openCL 上工作,我才意识到如果不能看到结果,就很难知道这是否正确。所以我开始玩openGL。我遵循了wikibooks上的openGL GLSL教程,内容非常丰富,但它没有涵盖点或粒子。

我不知道从哪里开始。我发现的大多数教程都是针对 openGL 默认程序的。我想用 GLSL 来做。我对这一切还是很陌生,所以如果答案就在我的眼皮底下,请原谅我的潜在白痴。我正在寻找的是如何在相互融合的点周围制作光晕。我对如何在片段着色器中执行此操作有一个粗略的想法,但据我所知,我只能抓取由我的点创建的多边形包围的像素。我敢肯定有办法解决这个问题,如果没有,那就太疯狂了,但我的新手一无所知。有人可以在这里给我一些方向吗?谢谢。

【问题讨论】:

  • 我不确定我是否正确理解了您的问题。据我了解,您问如何在每个点周围画一个光环。这样做的典型方法是生成额外的几何体(以您的点为中心的四边形,如果可用,可以由几何着色器生成),将其纹理化为光晕或先渲染没有光晕,然后对完整图像进行后处理第二步(例如在点周围模糊)。只要您可以使用标准的混合操作,我建议您使用第一个选项,因为它更容易并且可能更快
  • 正确。我还是新手,所以我没有想到这些简单的想法。我目前真的不知道后处理是如何工作的。我理解这个概念,但我不确定从哪里开始。但是四边形的想法听起来很简单直接。

标签: opengl glsl


【解决方案1】:

我认为您想要的是在启用GL_POINT_SPRITE 的情况下将粒子渲染为GL_POINTS,然后使用您的片段着色器以通常的方式映射纹理,或者以程序方式生成光晕渐变。

GL_POINTS 模式下渲染时,在顶点着色器中设置gl_PointSize 以设置粒子的大小。 vec2 变量 gl_PointCoord 将为您提供片段着色器中片段的坐标。

编辑:设置gl_PointSize 仅在启用GL_PROGRAM_POINT_SIZE 时生效。或者,只需使用glPointSize 为所有点设置相同的大小。此外,从 OpenGL 3.2(核心)开始,GL_POINT_SPRITE 标志已被移除,并且一直有效。

【讨论】:

  • 你能不能参考一些例子。我只发现不使用 GLSL 的东西。谢谢。
  • 我将你的答案标记为答案,尽管它不太有效,但我认为我现在走在正确的轨道上。谢谢。
  • 问题是,我自己真的找不到任何例子。我知道我是从手册页中得到的,直到它起作用为止。
  • 关于我在哪里。至少现在我知道不要浪费时间寻找。谢谢。
【解决方案2】:

只需绘制一个点精灵(使用 GL_POINT_SPRITE)使用混合函数:gl_src_alpha 和 gl_one,然后“光晕”应该是可见的。混合应该对“光环”负责,因此请查找有关该主题的更多信息。 您还必须禁用深度写入。

这里有一些链接:http://content.gpwiki.org/index.php/OpenGL:Tutorials:Tutorial_Framework:Particles

【讨论】:

    猜你喜欢
    • 2013-10-05
    • 1970-01-01
    • 2023-03-30
    • 2015-05-10
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多