type
status
date
slug
summary
tags
category
icon
password
正常的渲染流程是需要一个vao,一个vbo,一个ebo,然后将vertices数组和indices数组绑定上去,然后调用glDrawElements完成。前面的光照就是这么做的。但是如果在真实的游戏场景中,会有成千上万个几何图形需要渲染,如果一一渲染是不现实的。当调用glDrawElements的时候,cpu会告诉gpu渲染对应的几何物体,gpu和cpu都很快,但是它们之间的信息传输并不快。
原本想要渲染两个正方形应该调用两次glDrawElement,现在使用批量渲染将两个正方形看作一个几何体在gpu一次渲染出来。这就需要将translate应用到vertex数组,而vertex数组里面因该有两组正方形的顶点数据
然后再执行一次渲染就好,因为两个正方形渲染四个三角形,需要12个顶点,因此glDrawElement传入12
采用这种形式之后就不能像之前那样通过uniform和darwcal来设置颜色了,需要用layout将它传给片段着色器。纹理也是同理,但是纹理有一个32的上限,对于这个上限,可以每一批渲染以所有32个纹理为单位,渲染完这相关32个纹理的几何体再渲染下一批。
目前这些方块是被写死的,接下来需要将vbo解耦出来
首先在glBufferData传数据的时候不绑定任何东西,只申请缓冲区内存。并且因为这一块内存是需要变化的,所以要改成GL_DYNAMIC_DRAW;
每一帧更新的时候都需要创建一个vertices数组通过glBufferSubData将它更新到缓冲区。当然也可以通过glMapBuffer和glUnMapBuffer来申请和释放缓冲区的指针来操作它。以下是CreateQuad的实现
notion image
[C++网络编程]tcp/ip协议详解[OpenGL]光照
Loading...