在OpenGL和GLSL中的点渲染

4

问题:如何使用GLSL在openGL中呈现点?


信息: 一段时间以前,我用Python制作了一个引力模拟,并使用Blender进行渲染。它看起来像是这样的。作为一种练习,我正在将它移植到openGL和openCL上。我认为我已经在openCL中实现了它。直到我在openCL上工作了相当长的时间后,我才意识到在没有能够看到结果的情况下很难知道是否正确。所以我开始尝试openGL。我遵循了在Wikibooks上的openGL GLSL教程,非常有启发性,但它并没有涵盖点或粒子。

我不知道从哪里开始。我找到的大多数教程都是针对openGL默认程序的。我想使用GLSL来做这件事。我还是很新手,如果答案就在我的眼前,请原谅我的潜在愚笨。我想要的是如何使每个点周围形成光晕并相互融合。我对如何在片段着色器中实现这一点有一个大致的想法,但就我所知,我只能抓住由点创建的多边形所包含的像素。我相信有一种方法可以解决这个问题,否则就太疯狂了,但是我还是不知所措。有人能给我指点方向吗?谢谢。


我并不完全确定我正确理解了你的问题。从我的理解来看,你想知道如何在每个点周围绘制光晕。通常有两种方法可以做到这一点,一种是生成额外的几何图形(一个以你的点为中心的四边形,如果可用的话可以由几何着色器生成),该几何图形被纹理化为光晕;另一种是先不带光晕地渲染,然后在第二步对整个图像进行后期处理(例如,在点周围模糊)。只要你能接受标准混合操作,我建议使用第一种选项,因为它更容易,而且可能更快。 - Grizzly
好的,我对此还很陌生,所以这些简单的想法还没有出现在我的脑海里。目前我并不是很清楚后期处理的工作原理。虽然我理解概念,但我不太确定该从哪里开始。不过四元组的想法听起来足够简单和直接。 - Narcolapser
2个回答

7
我认为你想要的是将粒子以启用了GL_POINT_SPRITEGL_POINTS形式进行渲染,然后使用片段着色器对纹理进行常规映射或生成光晕渐变。
当你在GL_POINTS模式下进行渲染时,设置顶点着色器中的gl_PointSize来设置粒子的大小。变量gl_PointCoordvec2类型,在片段着色器中可用,它将为您提供碎片在粒子上的坐标。
编辑:仅当启用了GL_PROGRAM_POINT_SIZE时,设置gl_PointSize才会生效。或者,只需使用glPointSize来为所有点设置相同的大小。此外,从OpenGL 3.2(核心版本)开始,GL_POINT_SPRITE标志已被删除,并且实际上始终处于启用状态。

你能否提供一些示例参考?我只找到了一些不使用GLSL的东西。谢谢。 - Narcolapser
我把你的答案标记为正确答案,尽管它还没有完全解决我的问题,但我认为我现在已经找到了正确的方向。谢谢。 - Narcolapser
事实是,我自己确实找不到任何例子。 我知道的都是来自于手册,并一直摸索直到它能够工作。 - derkyjadex
关于我所在的位置,至少现在我知道不要浪费时间去搜索了。xD 谢谢。 - Narcolapser

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接