android gles2物体旋转,在Android的Opengles 2.0中绘制精灵的最快方法

我认为您正在追求粒子系统.类似的问题在这里:Drawing many textured particles quickly in OpenGL ES 1.1.

使用点精灵非常便宜,但是您必须在片段着色器中做额外的工作,如果您需要不同大小的粒子,我不确定GLES2是否支持gl_PointSize. gl_PointSize Corresponding to World Space Size

我的首选粒子系统将位置存储在双缓冲纹理中,然后使用单个绘制调用和一个四边形的静态数组进行绘制. This是相关的,但我将在这里进一步说明…

>创建纹理(如果可以的话,可以浮点,但这可能会限制所支持的设备).每个像素保存粒子位置,可能还包含旋转信息.

> [已编辑]如果需要为粒子设置动画,则需要每帧更改纹理中的值.要使其速度更快,请让GPU在着色器中完成.使用FBO,绘制全屏多边形并更新片段着色器中的值.问题是您不能读写相同的纹理(或不应该).常用的方法是通过创建要渲染的第二个纹理来双重缓冲纹理,同时您从第一个中读取,然后在它们之间进行乒乓球操作.

>创建用于绘制三角形的VBO.位置都相同,填充-1至1个四边形.但是,使每个四边形的纹理坐标指向上述纹理中的正确像素.

>绘制VBO,绑定您的位置纹理.在顶点着色器中,读取给定顶点纹理坐标的位置.将-1至1顶点位置缩放为正确的大小,应用该位置和任何旋转.使用原始的-1到1位置作为纹理坐标,以传递到片段着色器以添加任何常规的颜色纹理.

如果您使用的是带有gl_Vertex的GLSL版本,我非常喜欢在顶点着色器中生成这些坐标,从而节省了不必要的琐碎数据存储,仅用于绘制简单对象. This for example.

>要生成粒子,请使用glTexSubImage2D并将粒子块写入位置纹理.如果开始存储更多的粒子属性,则可能需要一些纹理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值