OpenGL:在每次迭代中绘制所有场景?

时间:2015-10-01 07:55:35

标签: c++ opengl

我在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函数的代码不需要一直执行?

这是预期使用所有这些功能的吗?

有更快的方法吗?

1 个答案:

答案 0 :(得分:2)

  

我是否必须在主循环的每次迭代中调用glDrawArrays?

是。实际上,每次绘制一帧时,你会多次调用它。

  

是否有任何Draw函数的代码不需要一直执行?

在你的代码中:不。你在抽奖中拥有的一切都属于那里。

  

这是预期使用所有这些功能的方式吗?

是的,大部分都是。

  

有更快的方法吗?

慢吗?你有资料吗?