问题标签 [point-sprites]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
7200 浏览

opengl - 是否可以使用 OpenGL 点精灵来模拟广告牌精灵?

我试图在 OpenGL 中设置点精灵,以像广告牌精灵那样随距离改变大小,但我无法获取这些值GL_POINT_DISTANCE_ATTENUATION_ARB来做任何有用的事情。是否存在与给定投影匹配的值的相关性?我想要做的甚至可能吗?

正在使用的渲染代码:

0 投票
1 回答
1553 浏览

c++ - 使用带有直接 x 的点精灵。需要采取哪些步骤?

这仍然是一个悬而未决的问题。

我正在尝试让点精灵系统工作在我的世界中渲染太阳。我注意到另一个用户问了一个类似的问题(使用相同的代码,大概来自我的班级:))但他们无法完成这个。我目前的代码如下:

IDirect3DDevice9 *m_Device = LudoRenderer::GetInstance()->GetDevice(); m_Device->SetRenderState(D3DRS_POINTSPRITEENABLE,true); m_Device->SetRenderState(D3DRS_POINTSCALEENABLE,true);

我没有在屏幕上看到我的太阳,它似乎在我的世界其他地方进行 alpha 混合,而不是在我试图加载的任何太阳上。这可能是因为我使用了哪些设备?任何帮助将不胜感激 :)

0 投票
1 回答
3031 浏览

ios - 如何在 OpenGL ES 1.1 中指定点精灵纹理坐标?

我正在编写一个粒子系统,它在 iOS 上的 OpenGL ES 1.1 中使用点精灵。一切都很好,直到我尝试纹理点精灵......当我渲染时,每个精灵都由我正在加载的纹理的左上角像素着色(而不是显示图像)。我尝试了不同的图像和不同的尺寸,但总是得到相同的结果。

设置代码(取自 GLPaint 示例):

和渲染代码:

当纹理点精灵时,你是否必须指定纹理坐标,如果是,如何?

0 投票
3 回答
2766 浏览

iphone - iOS 上 OpenGL ES2.0 中的多纹理点精灵?

我正在尝试使用 OpenGL ES 2.0 为 iphone 应用程序制作多纹理点精灵。我在网上找不到任何这样的例子,而且它似乎不起作用。对点精灵使用 GL_POINTS 模式时,gl_PointCoord 不能用于多个纹理是否存在一些内置限制?

我确定我正确地传递了纹理,因为我可以在 TRIANGLE_STRIP 模式下进行多重纹理处理,但我希望使用点精灵来加快速度。

如果可能话,一个指向工作代码示例的链接将非常有帮助。谢谢!

编辑:

下面是我如何将纹理传递给我的着色器。当我处于 TRIANGLE 或 TRIANGLE_STRIP 模式时,这让我可以进行多重纹理处理。

但是,如果我使用 POINTS 模式,那么我永远不会看到第二个纹理。也就是参考上面的shader代码,不管我做

gl_FragColor = texPixel;

或者

gl_FragColor = 模糊像素;

我看到相同的纹理。这似乎很奇怪。我的猜测是,您不能在点精灵上进行多重纹理处理,并且以某种方式拥有两个活动纹理或两次调用 gl_PointCoord 会导致问题。但我希望我错了。因此,如果有人有一个在 OpenGL ES 2.0 中使用点精灵的多纹理的简单示例,我会很乐意查看该代码!

编辑2:

顶点着色器:

片段着色器:

0 投票
1 回答
2457 浏览

ios - 具有深度测试的 OpenGL 点精灵 - 混合问题?

我正在渲染点精灵(在 iOS 上使用 OpenGL ES 2.0)作为用户的绘图笔画。我将这些点存储在顶点缓冲区对象中,因此我需要执行深度测试,以便精灵在提交绘制时以正确的顺序出现。

在渲染这些绘图笔画时,我看到了一种奇怪的效果,如下面的截图所示:

点精灵混合问题

注意蓝色笔划边缘周围的背景色“边框”,它被绘制在绿色上。用户在绿色笔划之后绘制了蓝色笔划,但是当重新绘制 VBO 时,首先绘制蓝色笔划。在绘制绿色笔划时,深度测试开始进行,并看到它应该在蓝色笔划之后,并且这样做并取得了一些成功。在我看来,这是某种混合问题,还是与错误计算片段着色器中的颜色有关?所有笔划的边缘都应该是透明的,但是片段着色器在处理这些片段时似乎将其与背景纹理结合在一起。

在我的应用程序中,我创建了一个深度渲染缓冲区并glEnable(GL_DEPTH_TEST)使用glDepthFunc(GL_LEQUAL). 我已经尝试过glDepthMask(),但无济于事。混合设置为glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA),并且点精灵颜色使用预乘的 alpha 值。绘图例程非常简单:

  • 绑定渲染到纹理 FBO。
  • 绘制背景纹理。
  • 绘制点精灵(来自许多 VBO)。
  • 将此 FBO 的纹理绘制到主帧缓冲区。
  • 呈现主帧缓冲区。


编辑

这是绘图例程中的一些代码。

绘图前的设置状态:

绘图程序:

谢谢你的帮助。

0 投票
1 回答
2502 浏览

opengl-es - 用于粒子系统的 GLSL PointSprite

我正在使用带有 PointSprites 的 ParticleSystem(受 Cocos2D Source 启发)。但我想知道如何重建 OpenGL ES 2.0 的功能

这些在使用 OpenGL ES 2.0 上下文时会生成 BAD_ACCESS。我应该简单地使用每个 PointSprite 的 2 个三角形吗?但这可能不是很有效(额外顶点的开销)。

编辑:所以,我对建议的解决方案的新问题来自: https ://gamedev.stackexchange.com/questions/11095/opengl-es-2-0-point-sprites-size/15528#15528

可以在批处理调用中传递许多不同的大小。我想过使用属性而不是统一,但是我需要始终将 PointSize 传递给我的着色器——即使我没有绘制 GL_POINTS。那么,也许是第二个着色器(仅用于 GL_POINTS 的着色器)?!我不知道在绘制例程中每帧切换着色器的开销(因为如果使用粒子系统,我自然也希望在没有 pointSize 的情况下渲染常规 GL_TRIANGLES)......对此有什么想法吗?

0 投票
2 回答
209 浏览

java - 我可以在 Java3D 中使用点精灵吗?

看起来对 Point Sprites 的原生支持是计划好的,但从未在 Java3D 中实现。

点精灵 RFE

除了将它添加到源代码并编译我自己的 Java3D 版本之外,是否有任何解决方法可以让我创建一个使用 Point Sprites 进行渲染的几何派生类?

0 投票
4 回答
8542 浏览

c++ - 根据与相机的距离调整点精灵的大小

我正在为大学使用仅核心 OpenGL 3.3 编写 Wolfenstein 3D 的克隆,我遇到了精灵的一些问题,即让它们根据距离正确缩放。

据我所知,以前版本的 OGL 实际上会为您执行此操作,但该功能已被删除,并且我所有重新实现它的尝试都导致完全失败。

我目前的实现在远处是可以通过的,在中距离不是太破旧,在近距离是奇怪的。

主要问题(我认为)是我不了解我正在使用的数学。
精灵的目标尺寸略大于视口,所以当你接近它时它应该“走出图片”,但事实并非如此。它变小了,这让我很困惑。
我录制了一个小视频,以防文字不够。(我的在右边)

预期结果 实际结果

谁能指导我到哪里出错,并解释原因?

代码:
C++

顶点着色器

片段着色器

0 投票
4 回答
3244 浏览

ios - 具有不同旋转的OpenGL ES 2.0点精灵-在着色器中计算矩阵?

我正在尝试找到一个解决方案,它允许我围绕 z 轴旋转具有不同属性的点精灵(即统一不会这样做)。

在我的应用程序中,我每帧绘制了成百上千个点精灵,然后将它们存储在 VBO 中(很可能最终会超过 1,000,000)。因此,我正在寻找内存使用和性能之间的最佳折衷方案。

当前的顶点和片段着色器如下所示:

我目前可以想象以下可能性:

  • mat4 rotMatrix为我的点精灵数据添加一个属性。将此传递给片段着色器并旋转每个片段:

    • 优点:
      • 保持着色器简单。
      • 计算着色器之外的矩阵的简单代码(GLKit例如使用)。
    • 缺点:
      • 大大增加了我的点精灵数据的大小(对于 4x4 矩阵,从 16 字节/点增加到 80 字节/点;对于 3x3 矩阵,增加到 52 字节/点……我相信可以使用 3x3 旋转矩阵?)。这可能会导致我的应用程序提前 3-5 次崩溃!
      • 将更多的计算推到 CPU 上(每帧数十/千次矩阵计算)。


  • 为我的点精灵数据添加一个float angle属性,然后在顶点着色器中计算旋转矩阵。如上所述将旋转矩阵传递给片段着色器。

    • 优点:
      • 使点精灵数据大小保持较小(从 16 到 20 字节/点)。
      • 将繁重的矩阵数学推送到 GPU。
    • 缺点:
      • 需要编写自定义 GLSL 函数来创建旋转矩阵。不是一个大问题,但我的矩阵数学生锈了,所以这可能容易出错,特别是如果我试图找出 3x3 矩阵解决方案......
      • 鉴于这必须发生在成百上千个顶点上,这是否会严重拖累性能(尽管由 GPU 处理)?


  • 我可以实际处理角度属性的 1 个字节(255 个不同的角度就足够了)。有什么方法可以使用某种查找,这样我就不需要不必要地重新计算相同的旋转矩阵?在顶点着色器中存储常量是我的第一个想法,但我不想开始在我的着色器中放置分支语句。

关于好方法的任何想法?

0 投票
2 回答
654 浏览

opengl - 在 OpenGL 中使用点精灵渲染矢量场

我想用 OpenGL 渲染一个矢量场可视化。现在,我有一个 3D 立方体,里面装满了需要用箭头替换的点。我已经阅读了很多关于 OpenGL 中的 Point Sprites 的内容,它们似乎非常适合我的需求。

我还没有真正使用纹理,所以有一些关于将它们与点精灵一起使用的问题:

首先,是否可以仅使用纹理轻松地用箭头替换我的点?如果是这样,是否可以使用着色器将这些点精灵旋转或缩放任意程度?

如果除了点精灵之外还有其他可能性来实现这一点,那么听到它们也会很棒。我正在使用 OpenGL 4.2。