首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将vertices[]传递给构造函数?

如何将vertices[]传递给构造函数?
EN

Stack Overflow用户
提问于 2017-05-09 05:08:26
回答 2查看 223关注 0票数 0

我正在使用C++和OpenGL。我试图做一些模型加载程序和渲染器的模拟设计。

我被困在这里:

我一直在用渲染类和窗口类在屏幕上画画,没有问题。我使用的是一个泛型模型类,到目前为止,这些类都是硬编码的,用于获取vertices108和colors108并绘制一个多维数据集。这是可行的,我可以实例数百个立方体很好。但是,我总是使用vertices108和colors108创建模型。

现在,我想放弃108,只需将任意大小的顶点和颜色传递到模型构造函数中。

现在它在伪代码中看起来是这样的:

代码语言:javascript
运行
复制
//this is in main.cpp
GLfloat vertices[108] = {
//vertices here
};
GLfloat colors[108] = {
//colors
};
mynamespace::Model::cube(vertices,colors);

这就是我在模型类中使用这个和模型类的方式:

代码语言:javascript
运行
复制
`//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[],并将它们发送给模型构造函数。(顶点和颜色的数目将匹配-将检查)。但是我很难移除那个硬编码的索引,例如vertices108,只是在它到达之前发送未知的垂直方向。

我想,最坏的情况是,我可以发送一个vertices[],然后在构造函数defn中,接收顶点,检查sizeof(),然后除以4,如果没有其他操作,可以通过循环分配值。但是,当我发送任何大小的vertices[]并打印出size of ()来检查它时,我总是得到4 bytes...and --当然没有任何绘图。

要明确的是,我的代码中没有错误,也没有我想要调试的特定代码,所以我不会粘贴现有的代码示例来解决任何问题。这就是我想要做的,有经验的人的一些建议。

做这种事情的好方法是什么?

在此之后,我想开始从文件加载网格,但首先我想了解我应该如何传递不同数量的顶点,并建立一个模型,以便我可以发送模型到渲染器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-09 09:10:03

您可以得到4个字节,因为当您将数组传递给函数时,数组会退化为Type *指针。所以你没有得到数组的长度,而是得到了指针的大小。

因为你说过你对两个人来说都是新手。

一个简单的工作方法就是充分发挥你的乐趣。

代码语言:javascript
运行
复制
fun(Type array,int n)

当你调用时,你会像这样调用:

代码语言:javascript
运行
复制
fun(array,sizeof(array))

这应该能解决你的问题。

票数 0
EN

Stack Overflow用户

发布于 2017-05-09 05:14:20

只需使用std::vector (首先需要包括<vector> )。

代码语言:javascript
运行
复制
//this is in model class declaration
std::vector<GLfloat> vertices_;
std::vector<GLfloat> colors_;
//then in the constructor definition
Model::Model(const std::vector<GLfloat> &vertices, const std::vector<GLfloat> &colors) {
    vertices_ = vertices;
    colors_ = colors;
}

然后:

代码语言:javascript
运行
复制
std::vector<GLfloat> vertices = {
//vertices here
};
std::vector<GLfloat> colors = {
//colors
};

mynamespace::Model cube(vertices,colors);

当然,如果您有std::using namespace std;,则可以删除所有的using namespace std;

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43861595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档