c++ - 将 2D 位图转换为 3D 立方体模型的有效方法?

标签 c++ c opengl graphics 3d

我想在 opengl 中创建 32x32 位图的立方体模型。例如,给定《 super 马里奥》中 Bob-omb 的 2D 位图,结果应如下所示:http://fc02.deviantart.net/fs49/f/2009/186/f/a/Bob_omb_in_Minecraft_by_Luafox.png这个想法是将位图中的每个 2D 像素表示为 3D 立方体。

每个模型都代表游戏中的敌人,因此我需要能够快速渲染这些模型。这样做的好方法是什么?

我所做的一项尝试是通过首先创建一个 32x32x2 的顶点网格,然后在适当的位置从这些顶点创建三角形以形成立方体面,从而从位图生成静态 3D 模型。我遇到的一个大问题是如何存储面部的颜色和法线。每个面的三角形需要共享一个顶点,共享顶点需要存储该面的颜色和法线。但是,我认为我没有足够的顶点让每个面都具有适当的颜色和法线。我想不出解决这个问题的优雅方法。

最佳答案

如果将正面渲染为单个纹理映射 GL_QUAD,对“透明”部分使用 alpha 和 GL_ALPHA_TEST,则速度会最快。然后,您将边界(即非正面方 block )设置为一个或多个 GL_QUAD_STRIP。

如果您决定将 sprite 绘制为一系列实际的立方体,例如,如果您想将 sprite 炸成单独的立方体,或者如果您在小立方体的表面上有非常详细的纹理,那么制作一个显示列表对于一个多维数据集并重复调用该显示列表。

关于c++ - 将 2D 位图转换为 3D 立方体模型的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350651/

相关文章:

c - 对自定义驱动程序使用#ifdef

c++ - 向字符串添加字符

c++ - 客户端断开连接时 TCP 套接字选择服务器段错误

c - strtok 的奇怪输出

C - 循环不会中断

c++ - 具有 OpenGL 纹理转换的 Awesomium

c++ - 如何为 C++ 程序创建安装文件?

c++ - 在 Visual Studio 2017 上无法使用 x64 Debug模式进行 opencv3.2 编译

c++ - 使用 OpenGL 在 Qt 中显示来自 DirectShow 的原始图像数据

c++ - 在 Qt 的外部类中使用 OpenGL 上下文