私はシンプルな3Dソフトエンジンを記述しようとしているが、私は少し問題を持っているを定義することなく、オブジェクトの配列。..3Dソフトエンジン:テンプレート引数リスト
私は頂点が含まれていMesh
と呼ばれるクラスを持っていますエッジデータ:次いで
struct Vertex { float x, y, z; };
struct Edge { int from, to; };
template <int vs, int es>
class Mesh {
public:
Vertex vertices[vs];
int vSize = vs;
Edge edges[es];
int eSize = es;
};
キューブの頂点およびエッジデータを指定Cube
と呼ばれる派生クラス(I後でコースの複数の形状を追加します):
class Cube : public Mesh<8, 12> {
public:
inline Cube() {
Vertex v[] = {
{ -1.0f, -1.0f, -1.0f },
{ 1.0f, -1.0f, -1.0f },
{ 1.0f, 1.0f, -1.0f },
{ -1.0f, 1.0f, -1.0f },
{ -1.0f, -1.0f, 1.0f },
{ 1.0f, -1.0f, 1.0f },
{ 1.0f, 1.0f, 1.0f },
{ -1.0f, 1.0f, 1.0f }
};
for (int i = 0; i < 8; i++)
this->vertices[i] = v[i];
Edge e[] = {
{ 0,1 },{ 1,2 },{ 2,3 },{ 3,0 },
{ 4,5 },{ 5,6 },{ 6,7 },{ 7,4 },
{ 0,4 },{ 1,5 },{ 2,6 },{ 3,7 }
};
for (int i = 0; i < 12; i++)
this->edges[i] = e[i];
}
};
そして、このエラーを得Cube
以降Triangle
などを保持することができるはずMesh
親クラスの配列を持っているEngine
呼ばその後クラス..
template <int w, int h, int mSize>
class Engine {
private:
int width = w;
int height = h;
Mesh meshes[mSize]; <-- problem
int mCount = 0;
byte fBuffer[w][h];
byte bBuffer[w][h];
public:
inline Engine() {};
inline void addMesh(Mesh mesh) { this->meshes[this->mCount++] = mesh; }
};
:
Engine.h: 19:3: error: invalid use of template-name 'Mesh' without an argument list
Mesh* meshes = new Mesh[m]
Engine.h: 25:23: error: 'Mesh' is not a type
inline void addMesh(Mesh mesh) { this->meshes[this->mCount++] = mesh; }
Mesh meshes[mSize];
にはMesh<a, b>
の値が含まれているはずですが、私はそれが可能な限りMesh
であることを知っているからです。
これを保存するにはどうすればよいでしょうか?
の配列として
meshes
を定義すると言う、あなたはMesh
ためではない - テンプレートベースを追加することができたとし私が知っているように 'std:vector'はそこでは利用できません。 –したがって、頂点と辺をポインタとして宣言し、cスタイル( 'malloc')またはC++スタイル(' this-> vertices = new Vertex [NUMBER_OF_VERTICES] ')を使用して派生クラスでそれらを割り当てる必要があります。 this-> vertices'を 'free'または' delete []することを忘れないでください!さらに、あなたのデータがヒープに格納されるように、私はそれがあなたがメッシュを格納するために望むものだと思います。 – DendyTheElephant
ありがとう!正確に私が必要なもの: –