【发布时间】:2020-04-26 09:26:46
【问题描述】:
我正在尝试创建体素风格的游戏,我想使用 GL_POINTS 来模拟球形体素。
我的目标是让它们看起来像 3d 球体,而不必渲染具有许多顶点的实际球体。
但是,当我创建大量 GL_POINTS 时,它们以某种方式重叠,这使得它们显然是扁平的圆形精灵。
这是一个例子: 我的 gl_points 重叠显示圆形精灵的图像示例:
我想让圆形 GL_POINTS 以某种方式重叠,使它们看起来像被挤压在一起的球体并相互隐藏部分。
作为我想要实现的示例,这里是 Eric Gurt 的 Star Defenders 3D 图像,他在 Javascript 中使用球形点作为他的关卡中的体素:
显示看起来像球体的点的示例图像:
如您所见,在点重叠的地方,它们隐藏了彼此的一部分,从而产生了它们是 3d 球体而不是圆形精灵的错觉。
有没有办法在 openGL 中复制它? 我正在使用 OpenGL 3.3.0。
【问题讨论】:
-
一个选项是设置深度(
gl_FragDepth)取决于到Fragment Shader中球体中心的距离 -
@Rabbid76 感谢您的评论!我什至不知道 gl_fragdepth 是什么。我对此进行了一些研究,仍在试图弄清楚如何让它发挥作用......
-
查看How can i make gradient sphere on glsl? 只需设置
glPointSize()以使用实际视图缩放/FOV 覆盖您的球体,并在着色器中计算球体表面片段...glPointSize的另一种替代方法是几何着色器从点...不要忘记按照 Rabbid76 的建议更新片段深度 -
@Spektre 感谢您的回复,我仍在学习并尽力使其正常工作
-
@Spektre 这允许您在着色器程序中控制 gl_PointSize :
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);此外,gl 点大小不只是控制 2d 精灵的宽度(以像素为单位)吗?我不认为这与深度有任何关系..
标签: c++ opengl points glpointsize