c++ - 使用 OpenGL 和 SDL 的 Sprite 表

标签 c++ opengl sdl textures sprite-sheet

我一直在开发一款新游戏,终于到了开始编写主要角色 Action 代码的地步,但我对如何做到这一点有疑问。

以前,我在 Allegro 中制作了两个游戏,所以 spritesheet 很容易实现,因为我在图像上建立了帧和位置,并将每一帧保存在不同的位图中,但我知道使用 OpenGL 可以做到这一点它不是必需的,而且要多花一点钱。

所以,我一直在考虑如何保存我的 spritesheet 并在我的程序中使用,但我只有一个想法。

我加载了图像并在纹理中进行了转换,在帮助我制作动画的函数中,我只是抓取一部分纹理进行绘制,而不是将每个纹理都存储在我的程序中。

这是最好的方法吗?

预先感谢您的帮助。

最佳答案

你走在正确的轨道上。

需要考虑的事项:

  • 在每个 sprite 周围留出足够的死角,这样视频卡就不会在小尺度上混入相邻 sprite 的纹素。
  • 适当设置纹理最小/放大过滤。如果您想要 block 状外观,GL_NEAREST 是可以的。
  • 如果您想花哨并节省一些纹理内存,则没有理由必须将 Sprite 布置在规则的网格中。较小的 Sprite 可以在纹理中挤得更近。
  • 如果您的 sprite 是从 3D 模型渲染的,您可以将模型的法线和置换贴图输出到另一个纹理中,然后将它们组合在片段着色器中以获得一些很棒的光照和自阴影。

关于c++ - 使用 OpenGL 和 SDL 的 Sprite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6463122/

相关文章:

opengl - 如何在 OpenGL 中使用着色器对图像进行后处理?

xcode - SDL_mixer.h 发生了什么?

c++ - 无法使用 SDL2 gfx 绘制实心圆

c++ - 关于非聚合结构的初始化

c++ - boost::spirit::气

python - 如何在opengl和pygame中用键盘按键移动立方体?

c++ - 影响程序输出的 3D 纹理大小不会抛出错误

无法在 VS 2019 上以 Release模式为 SDL 库构建解决方案

c++ - 什么是沙盒

c++ - 自定义队列类 C++