在OpenGL和GLSL中进行点渲染

时间:2011-12-29 16:27:12

标签: opengl glsl

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


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

我不知道从哪里开始。我找到的大多数教程都是针对openGL默认程序的。我想用GLSL来做。我仍然对这一切都很陌生,所以如果答案就在我的鼻子底下,请原谅我的潜在愚蠢。我正在寻找的是如何在相互融合的点周围制作光晕。我对如何在片段着色器中执行此操作有一个大致的想法,但据我所知,我只能抓取由我的点创建的多边形所包围的像素。我确信有一种方法可以解决这个问题,但如果不这样做会很疯狂,但我的新生儿中的我是无能为力的。有人可以给我一些方向吗?感谢。

2 个答案:

答案 0 :(得分:7)

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

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

编辑:设置gl_PointSize只有在GL_PROGRAM_POINT_SIZE启用后才会生效。或者,只需使用glPointSize为所有点设置相同的大小。此外,从OpenGL 3.2(核心)开始,GL_POINT_SPRITE标志已被删除,并且实际上始终处于打开状态。

答案 1 :(得分:0)

简单地绘制一个点精灵(使用GL_POINT_SPRITE)使用混合函数:gl_src_alpha和gl_one然后“halos”应该是可见的。混合应该负责“晕”,所以寻找有关该主题的更多信息。 此外,你必须禁用深度wrties。

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