我目前正在为一个小游戏编写2D引擎。
我的想法是只需一次绘制调用就能呈现整个场景。我认为可以在四边形上渲染每个2D图像,这意味着我可以使用实例化技术。
我想象中的顶点着色器可能看起来像这样:
...
in vec2 pos;
in mat3 model;
in sampler2d tex;
in vec2 uv;
...
我曾以为我可以在GPU上加载纹理,并像处理VBO一样获取它的句柄,但事实证明这并不简单。
看起来我需要调用:
glActiveTexture(GL_TEXTURE0..N);
对于我想要加载的每个纹理。现在这似乎不像我想象的那么容易编程。现代游戏引擎如何呈现多个纹理?
我读到GL_TEXTURE
的纹理限制取决于GPU,但至少为45。如果我想呈现由超过45个纹理组成的图像,例如90个纹理怎么办?
看来我必须呈现前45个纹理并从GPU中删除所有纹理,然后将另外45个纹理从硬盘加载到GPU中。这在每一帧都做起来似乎不是很合理。特别是当我想要动画化一个2D图像时。
我可以轻松想象一个简单的2D角色动画可能由10个不同的图像组成。这意味着我很容易超过纹理限制。
我的一个小想法是将多个图像合并成一个巨大的图像,然后通过UV坐标进行偏移。
我想知道我是否误解了OpenGL中纹理的工作方式。
您会如何在OpenGL中呈现多个纹理?