私はc++
初心者で、最初のアプリケーションをopenGL
でビルドしようとしています。C++とOpenGl:クラス内からメッシュオブジェクトインスタンスを作成するには
私は、main関数から描画したいメッシュオブジェクトを作成するための幅、長さ、高さなどのパラメータを取るルームクラスを作成しようとしています。
私は瞬時に、部屋の中から基本メッシュを作成しようとしていて、パラメータを使ってRoomを初期化しようとしていません。
クラスルーム内のプライベート変数としてメッシュオブジェクトを作成し、メインから呼び出して描画する方法を定義する際に問題があります。
私はBennyの素晴らしいチュートリアルを使用しており、Visual Studioソリューションで正確なGitHubファイルを持っています。
ここに投稿すると、mesh.hとメッシュが含まれています。 CPPはおそらく問題がthis linkから来ている場所です。ここで
は、現在のコード(私は念のため、私がメインに含めるすべてのものを含めました)
---- Room.hは-------------です -
#pragma once
#include <iostream>
#include <SDL2/SDL.h>
#include "display.h"
#include "mesh.h"
#include "shader.h"
#include "texture.h"
#include "transform.h"
#include "camera.h"
class Room
{
public:
Room();
~Room();
void drawRoom();
private:
Mesh* mesh;
};
---- Room.cpp ---------------
#include "Room.h"
#include <iostream>
#include <SDL2/SDL.h>
#include "display.h"
#include "mesh.h"
#include "shader.h"
#include "texture.h"
#include "transform.h"
#include "camera.h"
Room::Room()
{
Vertex vertices[] =
{
Vertex(glm::vec3(-1, -1, -1), glm::vec2(1, 0), glm::vec3(0, 0, -1)),
Vertex(glm::vec3(-1, 1, -1), glm::vec2(0, 0), glm::vec3(0, 0, -1)),
Vertex(glm::vec3(1, 1, -1), glm::vec2(0, 1), glm::vec3(0, 0, -1)),
Vertex(glm::vec3(1, -1, -1), glm::vec2(1, 1), glm::vec3(0, 0, -1)),
Vertex(glm::vec3(-1, -1, 1), glm::vec2(1, 0), glm::vec3(0, 0, 1)),
Vertex(glm::vec3(-1, 1, 1), glm::vec2(0, 0), glm::vec3(0, 0, 1)),
Vertex(glm::vec3(1, 1, 1), glm::vec2(0, 1), glm::vec3(0, 0, 1)),
Vertex(glm::vec3(1, -1, 1), glm::vec2(1, 1), glm::vec3(0, 0, 1)),
Vertex(glm::vec3(-1, -1, -1), glm::vec2(0, 1), glm::vec3(0, -1, 0)),
Vertex(glm::vec3(-1, -1, 1), glm::vec2(1, 1), glm::vec3(0, -1, 0)),
Vertex(glm::vec3(1, -1, 1), glm::vec2(1, 0), glm::vec3(0, -1, 0)),
Vertex(glm::vec3(1, -1, -1), glm::vec2(0, 0), glm::vec3(0, -1, 0)),
Vertex(glm::vec3(-1, 1, -1), glm::vec2(0, 1), glm::vec3(0, 1, 0)),
Vertex(glm::vec3(-1, 1, 1), glm::vec2(1, 1), glm::vec3(0, 1, 0)),
Vertex(glm::vec3(1, 1, 1), glm::vec2(1, 0), glm::vec3(0, 1, 0)),
Vertex(glm::vec3(1, 1, -1), glm::vec2(0, 0), glm::vec3(0, 1, 0)),
Vertex(glm::vec3(-1, -1, -1), glm::vec2(1, 1), glm::vec3(-1, 0, 0)),
Vertex(glm::vec3(-1, -1, 1), glm::vec2(1, 0), glm::vec3(-1, 0, 0)),
Vertex(glm::vec3(-1, 1, 1), glm::vec2(0, 0), glm::vec3(-1, 0, 0)),
Vertex(glm::vec3(-1, 1, -1), glm::vec2(0, 1), glm::vec3(-1, 0, 0)),
Vertex(glm::vec3(1, -1, -1), glm::vec2(1, 1), glm::vec3(1, 0, 0)),
Vertex(glm::vec3(1, -1, 1), glm::vec2(1, 0), glm::vec3(1, 0, 0)),
Vertex(glm::vec3(1, 1, 1), glm::vec2(0, 0), glm::vec3(1, 0, 0)),
Vertex(glm::vec3(1, 1, -1), glm::vec2(0, 1), glm::vec3(1, 0, 0)),
};
unsigned int indices[] = { 0, 1, 2,
0, 2, 3,
6, 5, 4,
7, 6, 4,
10, 9, 8,
11, 10, 8,
12, 13, 14,
12, 14, 15,
16, 17, 18,
16, 18, 19,
22, 21, 20,
23, 22, 20
};
mesh = new Mesh(vertices, sizeof(vertices)/sizeof(vertices[0]), indices, sizeof(indices)/sizeof(indices[0]));
}
Room::~Room()
{
}
void Room::drawRoom()
{
mesh.Draw();
}
私は次のエラー取得しています:
をC2228は、 '.Draw' の左エラーは、クラス/構造体/共用体ArchProgramer cを持っている必要があります。プロジェクト\ Visual Studioの2015 \ \ユーザー\ヌーノ・バルトロ\文書を\ archprogramer \ archprogramer \ 78
感謝room.cpp非常にあなたあなたの助けに!代わりに、ローカルに宣言され、
Mesh(Vertex* vertices, unsigned int numVertices, unsigned int* indices, unsigned int numIndices);
あなたが部屋のコンストラクタでRoom::mesh
を構築されていません。
C++とOpenGLを同時に学習しますか?それはかなり野心的です! – DeathByTensors
ドリューに同意します。これはかなり単純な問題です。あなたが初めて両方に近づいているなら、C++とOpenGLの両方でそれらの多くを打つでしょう。あなたの問題は、インスタンス変数がメッシュメッシュとして宣言されているため、デフォルトのコンストラクタが動作する必要があります。あなたはそれをMesh * meshとして宣言し、mesh = new Mesh(... parameters ...)を使ってそれを作成する必要があります –
@MarianoRuggieroあなたの助けてくれてありがとうMariano、インスタンスは今Roomのプライベートメッシュとして保存されています。しかし、メソッドdrawRoom()を追加しました。このメソッドでは、メッシュクラスでDraw()メソッドを使用するメッシュオブジェクトを取得できません。私はvoid drawRoom()をプロトタイプしました。 Room.cppではvoid drawRoom(){mesh.Draw()}を定義しましたが、コンパイルされません。 - –