1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 04:35:28 +08:00

fix typo in 04-01

This commit is contained in:
kamiduki
2024-03-05 13:55:57 +08:00
committed by Gary Wang
parent 4c4447110d
commit 1b503c630e

View File

@@ -24,7 +24,7 @@ for(unsigned int i = 0; i < amount_of_models_to_draw; i++)
实例化这项技术能够让我们使用一个渲染调用来绘制多个物体来节省每次绘制物体时CPU -> GPU的通信它只需要一次即可。如果想使用实例化渲染我们只需要将<fun>glDrawArrays</fun>和<fun>glDrawElements</fun>的渲染调用分别改为<fun>glDrawArraysInstanced</fun>和<fun>glDrawElementsInstanced</fun>就可以了。这些渲染函数的**实例化**版本需要一个额外的参数,叫做<def>实例数量</def>(Instance Count)它能够设置我们需要渲染的实例个数。这样我们只需要将必须的数据发送到GPU一次然后使用一次函数调用告诉GPU它应该如何绘制这些实例。GPU将会直接渲染这些实例而不用不断地与CPU进行通信。
这个函数本身并没有什么用。渲染同一个物体一千次对我们并没有什么用处,每个物体都是完全相同的,而且还在同一个位置。我们只能看见一个物体!于这个原因GLSL在顶点着色器中嵌入了另一个内建变量<var>gl_InstanceID</var>。
这个函数本身并没有什么用。渲染同一个物体一千次对我们并没有什么用处,每个物体都是完全相同的,而且还在同一个位置。我们只能看见一个物体!于这个原因GLSL在顶点着色器中嵌入了另一个内建变量<var>gl_InstanceID</var>。
在使用实例化渲染调用时,<var>gl_InstanceID</var>会从0开始在每个实例被渲染时递增1。比如说我们正在渲染第43个实例那么顶点着色器中它的<var>gl_InstanceID</var>将会是42。因为每个实例都有唯一的ID我们可以建立一个数组将ID与位置值对应起来将每个实例放置在世界的不同位置。
@@ -353,4 +353,4 @@ for(unsigned int i = 0; i < rock.meshes.size(); i++)
在某些机器上10万个小行星可能会太多了所以尝试修改这个值直到达到一个你能接受的帧率。
可以看到,在合适的环境下,实例化渲染能够大大增加显卡的渲染能力。正是出于这个原因,实例化渲染通常会用于渲染草、植被、粒子,以及上面这样的场景,基本上只要场景中有很多重复的形状,都能够使用实例化渲染来提高性能。
可以看到,在合适的环境下,实例化渲染能够大大增加显卡的渲染能力。正是出于这个原因,实例化渲染通常会用于渲染草、植被、粒子,以及上面这样的场景,基本上只要场景中有很多重复的形状,都能够使用实例化渲染来提高性能。