gpt4 book ai didi

Android/离屏渲染到纹理

转载 作者:行者123 更新时间:2023-11-29 01:54:43 28 4
gpt4 key购买 nike

我正在制作一个显示行星的 2D 图形应用程序。我说 2D 是因为大多数应用程序都是 2D 的。然而,我想将一些 3D 对象渲染成屏幕外的动态 Sprite (到纹理),具有透明(可能是半透明)区域,然后将这些渲染的纹理作为 2D 纹理四边形渲染到 Activity 屏幕。在这种情况下,将 3D 对象直接渲染到屏幕上并不是最佳选择,因为这需要我实现某种 3D 拾取。我在数学方面还没有那么先进。另请注意,主屏幕渲染将是正交的,而屏幕外渲染将是透视的。

我怎样才能做到这一点(总体思路,无需具体说明),最有效的方法是什么?这会减少对各种设备的支持吗?此外,如果 3D Sprite 渲染每帧都不断刷新(例如旋转精细量),是否会通过连续卸载/重新加载纹理到内存来降低帧速率?我想有些场景可能有多达 10 个这样的 3D 屏幕外 Sprite 。

感谢帮助

最佳答案

如果您真的必须使用离屏渲染,只需搜索 FBO(帧缓冲对象)并为其附加纹理,然后在主视图中将纹理用作 2D。这是一个非常简单的过程,但可能会降低速度。您可能无法对其进行任何多线程处理,因此您应该只创建 1 个 FBO。它的尺寸可能必须是 2 的幂,因此分辨率可能与您希望的不同。这个过程不会持续加载/卸载任何东西,数据是在创建纹理时分配的,GL 直接从中绘制/读取。这里最大的缺点是内存。您将创建多达 10 个这种纹理,只是为了在它们上绘制并显示一次。

不过,将此对象放置在主缓冲区的特定位置可能非常容易:将所有逻辑都当作您想绘制一个全屏行星但使用“viewport”方法将其放置到特定部分屏幕。

如果这些行星图像只会根据用户请求更新(您不想每一帧都绘制它们)那么我建议您尝试将两者结合起来:创建一个具有相同大小或更大纹理的 FBO 然后主视图并使用“视口(viewport)”方法将所有行星绘制到这个单一纹理。然后你可以更新任何你想要的,只是不要清除缓冲区,而是在缓冲区/纹理的特定部分绘制一个清晰的矩形。并继续将整个纹理绘制到主缓冲区。

关于Android/离屏渲染到纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15868854/

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