我正在尝试创建一个由块组成的小“世界”,类似于Voxel引擎,但有点不同。
为此,我考虑创建一个类Block
,它有一个方法draw()
。让我们将Block
视为长方体。然后我可以通过它的长度,宽度,高度来表征每个Block
,并通过模型矩阵对其进行缩放,以获得固定的顶点数组(即以原点为中心的单位立方体)。
我的问题是:声明这个数组由8个类型为GLfloat
的顶点组成的最佳方法是什么(即24 GLfloat
个条目)。由于我可能有很多块,我希望数组只保存一次,Block
的每个实例都应该使用这个精确的数组,而不是每个Block
携带它。实现这一目标的最佳方法是什么?
由于我对此很陌生,我无法理解static
或const
(或两者兼有?)在这里是否有用。我想过要做什么
const GLfloat unit_cube_vertices = { ... };
class Block
{ ... };
有更好/规范的方式吗?
答案 0 :(得分:2)
如果数组只用于你的类(或与类的关系),我会将它声明为类的一部分(请注意,这里的静态意味着只有一个副本),即
class Block {
public: // or private if not used anywhere else
static const GLfloat unit_cube_vertices[24];
};
如果要全局使用,请按照声明的方式保留它。
答案 1 :(得分:1)
这个问题似乎与static / const没什么关系。这两个关键字只告诉C ++如何访问存储,以及它应该在哪里可见。你在做什么都很好。
const
表示不得再更改变量。在极少数情况下,如果编译器知道值不会改变,编译器可以优化代码。
static
指的是不同编译单元中对象的可见性(〜项目中的不同文件)。具有static
链接的变量将不会在其他编译单元中看到。