c++ - 错误 - “初始化”:无法从“glm::vec2”转换为“glm::vec3”
问题描述
我正在按照本教程使用 C++ 制作 3D 游戏引擎。
我正在使用 GLM,但我收到了标题中的错误。
我有一个自定义结构的数组。它保存位置、颜色和纹理坐标。
“顶点”结构
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 中单击错误时,它会将我带到顶点数组的末尾。
我已经用谷歌搜索并搜索了 Stack Overflow,但我找不到这个问题的答案。我将完整的 main.cpp 文件存储在这里,如果有帮助的话。
解决方案
您正在初始化一个顶点数组并尝试使用 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/
推荐阅读
- c++ - 尝试打开文件对话框,comdlg32.lib 在哪里?
- html - 为了将图标 syde 并排放置,我需要进行哪些更改
- perl - 舍入浮点数等于 5
- node.js - 带有代理的 React 应用程序不适用于 heroku,但以前的应用程序可以吗?
- go - 如何生成相对于模块路径的路径
- flutter - 处理后使用了一个对象 - Flutter/Dart
- python-sphinx - 在 Sphinx 代码块中显示用户可修改的文本
- reactjs - 如何以反应钩子形式将输入的数据转换为变量?
- docker - Kubelet 错误地认为磁盘已满
- c++ - 是否有 C++ 的 std::cin 的 C 等价物?