我使用 OpenGL ES 2.0 自己创建了一些简单的渲染器。本质上,它只是一个根据给定的精灵纹理渲染四边形的类。详细地说,它实际上只是一个接受表示四边形的对象的对象。每个四边形对象维护一个世界变换和对象变换矩阵,并提供在给定数量的帧上变换它们的方法,并且还指定精灵的纹理偏移量。这个四边形类还维护了一个要在其矩阵上执行的变换操作列表。渲染器类然后从四边形读取所有这些属性并设置一个 VBO 来绘制渲染列表中的所有四边形。
例如:
Quad q1 = new Quad();
Quad q2 = new Quad();
q1->translate(vector3( .1, .3, 0), 30); // Move the quad to the right and up for 30 frames.
q2->translate(vector3(-.1, -.3, 0), 30); // Move the quad down and to the left for 30 frames.
Renderer renderer;
renderer.addQuads({q1, q2});
It's more complex than this, but you get the simple idea.
从实现的角度来看,在每一帧上,它根据指令转换每个对象的基本顶点,将它们全部加载到包含 alpha 值信息的 VBO 中,然后传递给着色器程序以一次绘制所有四边形。
这显然不是我所说的渲染引擎,而是执行类似的任务,仅用于渲染 2D 四边形而不是 3D 几何。我只是好奇我是否走上了开发临时渲染引擎的正确轨道。我同意在大多数情况下,使用已建立的渲染引擎开始理解它们是很棒的,但从我的角度来看,我喜欢了解事物是如何实现的,而不是学习一些预先构建的东西然后学习它是如何工作的。