1

ボクセル エンジンに似ていますが、少し異なるブロックで作られた小さな「世界」を作成しようとしています。

Blockこのために、メソッドを持つクラス、たとえば を作成することを考えましたdraw()Blocka を立方体と考えてみましょう。次に、長さ、幅、高さによってすべてを特徴付けBlock、頂点の固定配列 (つまり、原点を中心とする単位立方体の配列) のモデル マトリックスを介してスケーリングすることで描画できます。

GLfloat私の質問は、タイプの 8 つの頂点(つまり、24GLfloatエントリ)で構成されるこの配列を宣言する最良の方法は何でしょうか。多くのブロックがある可能性があるため、配列を一度だけどこかに保存し、 のすべてのインスタンスは、 everyBlockで持ち運ぶのではなく、この正確な配列を使用する必要がありますBlock。これを達成するための最良の方法は何ですか? 私はこれにまったく慣れていないので、ここで役立つかどうstaticか(または両方?) が本当に理解できませんでした。constやろうと思った

const GLfloat unit_cube_vertices = { ... };

class Block
{ ... };

より良い/標準的な方法はありますか?

4

2 に答える 2

2

配列がクラスによってのみ使用される (またはクラスとの関係で) 場合は、それをクラスの一部として宣言します (ここで静的とは、コピーが 1 つしかないことを意味することに注意してください)。

class Block {
public:  // or private if not used anywhere else
    static const GLfloat unit_cube_vertices[24];
};

グローバルに使用する場合は、宣言したとおりにしてください。

于 2013-08-14T12:07:53.160 に答える
1

この質問は、静的/定数とはあまり関係がないようです。これらの 2 つのキーワードは、C++ にストレージへのアクセス方法と、ストレージを表示する場所を指示するだけです。あなたがしていることはまったく問題ありません。

const変数を変更してはならないことを意味します。まれに、値が変更されないことがわかっている場合、コンパイラはコードを最適化できます。

staticさまざまなコンパイル単位 (~プロジェクト内のさまざまなファイル) でのオブジェクトの可視性を参照します。リンケージを持つ変数はstatic、他のコンパイル単位では見られません。

于 2013-08-14T12:03:13.483 に答える