我试图在我的动态壁纸应用程序的背景中绘制闪烁的星星,以给它一些" spice"。我想过有两种方法可以做到这一点。 1,在Photoshop中制作动画gif,将其转换为Android studio中的电影并将其设置为背景。或者说,使用OpenGL ES绘制闪烁的星星。我更喜欢第二种方式,但我该怎么做呢?我在考虑绘制一个圆圈,然后将其缩小到非常小并复制它(一百次)并将其全部翻译到整个屏幕上,但这看起来效率不高。谁能告诉我有什么方法可以做到这一点?
答案 0 :(得分:1)
您可以看到此How to draw a star in iOS OpenGL ES 2.0。
顶点着色器
在顶点着色器中,您可以像往常一样变换顶点, 并设置内置的gl_PointSize变量:
uniform float PointSize; attribute vec4 Position;
void main() {
gl_Position = ...; // Transform Position attribute;
gl_PointSize = PointSize; }
对于这个例子,我使用了一个统一的点大小,这意味着所有的星星都有相同的大小。
根据所需效果,您还可以计算尺寸 基于距离,或使用额外的顶点属性 为每颗星指定不同的大小。
片段着色器
在片段着色器中,您现在可以访问内置的gl_PointCoord 变量来获取片段内的片段的相对坐标 点精灵。如果你的点精灵是一个简单的纹理图像,你可以 直接使用它作为纹理坐标。
uniform sampler2D SpriteTex;
void main() {
gl_FragColor = texture2D(SpriteTex, gl_PointCoord); }