我在C ++中编写了一些包装器来在OpenGL场景中绘制一些3D点。我在OpenGL方面不是很有经验,我不确定我是否按预期跟踪了管道。这或多或少是我的代码:
主要功能:
console.log("X: %o. Y: %o", e.x, e.y)
std::vector<Element> elements(1);
while (true) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
for (auto& element : elements) element.Draw();
... // some other operations and buffer swapping
}
上课:
Element
我是否必须在主循环的每次迭代中调用class Element {
public:
Element() {
... // fill m_xyz, m_rgb and m_pose
}
void Draw() {
// translate
glPushMatrix();
glRotatef(m_pose[3], m_pose[4], m_pose[5], m_pose[6]);
glTranslatef(m_pose[0], m_pose[1], m_pose[2]);
// draws 3D points
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, m_xyz.data());
glColorPointer(3, GL_FLOAT, 0, m_rgb.data());
glDrawArrays(GL_POINTS, 0, m_xyz.size() / 3);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
// retrieve previous pose
glPopMatrix();
}
private:
std::vector<float> m_xyz, m_rgb, m_pose;
};
?
是否有glDrawArrays
函数的代码不需要一直执行?
这是预期使用所有这些功能的吗?
有更快的方法吗?
答案 0 :(得分:2)
我是否必须在主循环的每次迭代中调用glDrawArrays?
是。实际上,每次绘制一帧时,你会多次调用它。
是否有任何Draw函数的代码不需要一直执行?
在你的代码中:不。你在抽奖中拥有的一切都属于那里。
这是预期使用所有这些功能的方式吗?
是的,大部分都是。
有更快的方法吗?
慢吗?你有资料吗?