【发布时间】:2017-05-09 05:08:26
【问题描述】:
我正在使用 C++ 和 OpenGL。我正在尝试对模型加载器和渲染器进行一些模拟设计。
这是我卡住的地方:
我一直在用我的渲染器类和窗口类在屏幕上绘制,那里没有问题。 我正在使用一个通用模型类,直到现在它被硬编码为获取顶点 [108] 和颜色 [108] 并绘制一个立方体。这很有效,我可以实例化数百个立方体就好了。但是,我总是使用顶点[108] 和颜色[108] 创建模型。
现在我想放弃 [108] 并将任意大小的顶点和颜色传递给模型构造函数。
现在看起来像伪代码:
//this is in main.cpp
GLfloat vertices[108] = {
//vertices here
};
GLfloat colors[108] = {
//colors
};
mynamespace::Model::cube(vertices,colors);
这就是我在模型类中一直使用它的方式:
`//this is in model class declaration
GLfloat vertices_[108];
GLfloat colors_[108];
//then in the constructor definition
Model::Model(vertices,colors) {
//loop through, i<108, and assign vertices,colors to vertices_,colors_
}
`
这对于学习目的来说效果很好。我现在想开始创建各种大小的 vertices[] 并将它们发送到 Model 构造函数。 (顶点和颜色的数量将匹配 - 将检查)。但是我很难删除那个硬编码索引,例如vertices[108],然后只发送 vertices[unknown until it 到达]。
我想,最坏的情况,我可以发送一个顶点[],然后在构造函数 defn 中接收顶点,检查 sizeof() 并除以 4,如果没有其他方法可以通过循环赋值。但是,当我通过发送任何大小的 vertices[] 并打印出 sizeof() 来检查它时,我总是得到 4 个字节......当然什么也没有。
需要明确的是,我的代码中没有出现错误,也没有要调试的特定代码,因此我没有粘贴现有代码示例来解决任何问题。这意味着在这里是我想要做的,有经验的人有什么建议。
做这种事情的好习惯是什么?
在此之后,我想开始从文件加载网格,但首先我想了解我应该如何传递不同数量的顶点并制作模型,以便我可以将模型发送到渲染器。
【问题讨论】:
-
您可以依赖于顶点的外部存储,只需将指针和大小(顶点数)传递给模型类的构造函数。您还可以使用这些参数在模型类中创建“私有”副本。为此,请阅读std::vector。要从
std::vector中提取“原始数据”,它提供了一个方法std::vector::data()。 -
成功了 - 非常感谢!