gpt4 book ai didi

ios - 如何在 iOS OpenGL ES 2.0 中绘制星星

转载 作者:行者123 更新时间:2023-11-29 02:20:03 27 4
gpt4 key购买 nike

这个问题以前曾被问过,但几年前在我的搜索中被问过。答案总是使用纹理贴图,但我真正想做的是将星星表示为单个顶点 - 你可能认为我在用一种简单的方法来应对,但事实上,单点光源看起来非常好和现实。但是我想用高斯模糊之类的东西来处理那个光点,在放大或获得更亮的星星时也给它更多的 body 。我打算对高斯模糊图像进行纹理贴图,但如果我理解正确,我将不得不用 4 个顶点绘制每颗星。也许不是那么困难,但如果我只能处理一个顶点,我不想去那里。顶点着色器会这样做吗? GLKBaseEffects 能让我到达那里吗?有什么建议吗?

谢谢。

最佳答案

您可以使用点 Sprite 。

绘制调用

您使用包含星星图像的纹理,并使用典型设置来绑定(bind)纹理,将其绑定(bind)到着色器中的采样器制服,等等。

为每颗星绘制一个顶点,将 GL_POINTS 作为基本类型,作为第一个参数传递给 glDrawArrays()/glDrawElements().不需要纹理坐标。

顶点着色器

在顶点着色器中,您可以像平常一样变换顶点,并设置内置的 gl_PointSize 变量:

uniform float PointSize;
attribute vec4 Position;

void main() {
gl_Position = ...; // Transform Position attribute;
gl_PointSize = PointSize;
}

对于这个例子,我使用了统一的点大小,这意味着所有星星都将具有相同的大小。根据所需的效果,您还可以根据距离计算大小,或使用附加顶点属性为每颗星星指定不同的大小。

片段着色器

在片段着色器中,您现在可以访问内置的 gl_PointCoord 变量来获取点 Sprite 内片段的相对坐标。如果你的点 Sprite 是一个简单的纹理图像,你可以直接使用它作为纹理坐标。

uniform sampler2D SpriteTex;

void main() {
gl_FragColor = texture2D(SpriteTex, gl_PointCoord);
}

附加 Material

我在这里回答了一个有点类似的问题:Render large circular points in modern OpenGL 。由于它是针对桌面 OpenGL,而不是针对纹理 Sprite ,因此这似乎值得单独回答。但有些步骤是共享的,可能会在其他答案中进行更详细的解释。

关于ios - 如何在 iOS OpenGL ES 2.0 中绘制星星,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28254209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com