【发布时间】:2016-05-11 13:47:26
【问题描述】:
我是c++ 初学者,正在尝试使用openGL 构建我的第一个应用程序。
我正在尝试创建一个 Room 类,该类将采用宽度、长度和高度等参数来创建一个网格对象,然后我想从主函数中绘制该对象。
目前我没有尝试使用任何参数初始化 Room,只是尝试从房间内创建基本网格,CPP 而不是从主。
我无法在教室中创建一个网格对象作为私有变量,然后定义一个方法来通过从 main 调用它来绘制它。
我正在使用 Benny 的精彩教程,并且在我的 Visual Studio 解决方案中拥有他的确切 GitHub 文件。
我在这里发布它,它们包括mesh.h 和mesh。 CPP 这可能是问题来自this link。
这是当前代码(我已将所有内容都包含在 main 中,只是为了确保)
----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();
}
我收到以下错误:
'.Draw' 左侧的错误 C2228 必须有 class/struct/union ArchProgramer c:\users\nuno bártolo\documents\visual studio 2015\projects\archprogramer\archprogramer\room.cpp 78
非常感谢您的帮助!
【问题讨论】:
-
同时学习C++和OpenGL?雄心勃勃!
-
我同意德鲁的观点。这是一个非常简单的问题,如果你是第一次接触 C++ 和 OpenGL,你会遇到很多问题。您的问题是实例变量被声明为 Mesh 网格,它需要默认构造函数才能工作。您需要将其声明为 Mesh* 网格并使用 mesh = new Mesh(...parameters...) 来创建它
-
@MarianoRuggiero 感谢您的帮助 Mariano,该实例现在正在保存为 Room 的私有网格;但是我添加了一个方法 drawRoom() 并且在这个方法中我无法让网格对象使用网格类中的 Draw() 方法。在公共下的 Room.h 中,我制作了 void drawRoom();在 Room.cpp 我定义了 void drawRoom() { mesh.Draw()} 但它不会编译? ——