我正在按照tutorial使用C ++制作3D游戏引擎。
我正在使用GLM,但出现标题中的错误。
我有一个自定义结构的数组。它保存位置,颜色和texcoords。
“顶点”结构
struct Vertex {
glm::vec3 position;
glm::vec3 color;
glm::vec2 texcoord;
};
“顶点”数组:
Vertex vertices[] = {
//POSITION
glm::vec3(0.0f, 0.5f, 0.f),
glm::vec3(-0.5f, -0.5f, 0.f),
glm::vec3(0.5f, -0.5f, 0.f),
//COLOR
glm::vec3(1.f, 0.f, 0.f),
glm::vec3(0.0f, 1.f, 0.f),
glm::vec3(0.0f, 0.f, 1.f),
//TEXCOORDS
glm::vec2(0.f, 1.f),
glm::vec2(0.f, 0.f),
glm::vec2(1.f, 0.f)
};
当我单击Visual Studio中的错误时,它将带我到Vertice数组的末尾。
我已经用Google搜索并搜索了Stack Overflow,但找不到该问题的答案。我有完整的main.cpp文件存储了here,如果有帮助的话。
答案 0 :(得分:0)
您正在初始化一个顶点数组,并尝试使用glm :: vec3和glm :: vec2类型对其进行初始化。类型不匹配。您需要做的是:
Vertex vertices[size];
for(size_t i = 0; i < size; i++) {
vertices[i] = Vertex( /* initialize however you need to */ );
}
这将初始化大小为size
的数组,并用Vertex
个对象填充它。请注意,这将初始化堆栈上的数组,这意味着您将只能存储少量的顶点。您真正应该做的是:
std::vector<Vertex> vertices(size);
for(auto& vertex : vertices) { // range-based for
vertex = Vertex{ glm::vec3(x,y,z), glm::vec3(x,y,z), glm::vec2(u,v) };
}
有关堆栈与堆分配的更多信息:https://www.geeksforgeeks.org/stack-vs-heap-memory-allocation/,范围基于:https://www.geeksforgeeks.org/range-based-loop-c/和std :: vector:https://www.geeksforgeeks.org/vector-in-cpp-stl/
答案 1 :(得分:0)
您声明了数组,因此每个数组元素必须放在初始化器中。
Vertex vertices[] = {
// First element
{
glm::vec3(0.0f, 0.5f, 0.f), //POSITION
glm::vec3(1.f, 0.f, 0.f), //COLOR
glm::vec2(0.f, 1.f), // TEXTCOORD
},
// Second element
{
glm::vec3(-0.5f, -0.5f, 0.f),
glm::vec3(0.f, 1.f, 0.f),
glm::vec2(0.f, 0.f),
},
// Third element
{
glm::vec3(0.5f, -0.5f, 0.f),
glm::vec3(0.f, 0.f, 1.f),
glm::vec2(1.f, 0.f)
}
};