我想在 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/