gpt4 book ai didi

performance - OpenGL 平铺渲染 : most efficient way?

转载 作者:行者123 更新时间:2023-12-04 01:47:49 26 4
gpt4 key购买 nike

我正在创建一个基于 tile 的 2D 游戏,作为学习基本“现代”OpenGL 概念的一种方式。我在 OpenGL 2.1 中使用着色器,并且熟悉渲染管道以及如何在屏幕上实际绘制几何图形。我想知道的是组织 tilemap 以快速有效地呈现的最佳方式。我想到了几种可能的方法:

1.) 将表示单个图块(顶点和纹理坐标)的四边形存储在 VBO 中,并使用单独的 draw* 渲染每个图块。调用,将其翻译到屏幕上的正确位置并使用 uniform2i给出该特定图块在纹理图集中的位置;

2.) 使用 BufferSubData 在屏幕上保留一个包含每个图块的 VBO(已经计算的屏幕坐标和纹理图集坐标)每帧更新瓷砖,但使用单个 draw*称呼;

3.) 保持包含静态 NxN“块”瓷砖的 VBO,绘制但许多瓷砖块在屏幕上至少部分可见并将它们每个翻译到位。

*如果可能的话,我想远离最后一个选项,除非渲染 64x64 的块不是太低效。瓦片以该大小的块加载到内存中,即使一次只有大约 20x40 的瓦片在屏幕上可见,我也必须一次渲染最多四个块。这种方法还会以其他几种方式使我的代码复杂化。

那么,其中哪一种是渲染瓷砖屏幕的最有效方法?有没有更好的方法?

最佳答案

你可以做其中任何一种,它们可能没问题;您提议渲染的内容非常非常简单。

#1 原则上肯定比其他选项更糟糕,因为您将绘制许多极其简单的“模型”,而不是让 GPU 在一次绘制调用中执行大量批处理工作。但是,如果您一次在屏幕上只能看到 20×40 = 800 个图块,那么这对于任何现代 CPU 和 GPU 来说都是微不足道的工作量(除非您正在做一些疯狂的片段着色器)。

我建议您选择最容易为您编写的程序,以便您可以继续开发您的游戏。我想这将是#1,或者可能是#2。 如果以及何时 您发现自己遇到了性能问题,执行 #2 或 #3 中的任何一个(64×64 听起来像一个很好的块大小)可以让您在程序的绘图部分(即更新缓冲区)上花费最少的 CPU 时间。

关于performance - OpenGL 平铺渲染 : most efficient way?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706433/

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