【问题标题】:using std::list to store vertices and the draw them with SFML使用 std::list 存储顶点并使用 SFML 绘制它们
【发布时间】:2018-09-09 10:36:33
【问题描述】:

使用 sfml,出于某些原因,我想将我的顶点存储在这样的列表中:

std::list<sf::Vertex> shape{};
shape.push_back(sf::Vertex(...);

但我真的不知道如何拨打电话

window.draw(...);

我猜应该是这样的:

window.draw(shape.begin(), shape.size(), sf::LineStrip);

现在我猜它不起作用的原因是因为列表不支持随机访问......有人知道吗?

【问题讨论】:

  • 你为什么不改用std::vector
  • 因为我要在整个过程中添加很多顶点,所以从效率来看,列表似乎更好?我实际上找到了我必须做的解决方案,比如 draw(&(*shape.begin()), ...,...)
  • “我实际上找到了我必须做的解决方案,例如 draw(&(*shape.begin()), ...,...)” - 现在如果shape 不是向量,则您有未定义的行为。
  • “列表似乎更好” - 你应该实际对这些东西进行基准测试,而不是仅仅假设。我已经好几年没用过链表了,因为动态数组(比如std::vector)在大多数情况下表现得更好(而且添加的成本可以很容易地用reserve优化)
  • 我会考虑您的所有建议。我还有很多东西要学,有时我很固执。感谢你们花时间解释这一切。

标签: c++ sfml vertex vertices stdlist


【解决方案1】:

SFML 期望在连续存储中给出顶点。你可以这样做:

std::vector<sf::Vertex> vec(shape.begin(), shape.end()); // copy
window.draw(vec.data, vec.size(), sf::LineStrip);

当然,首先使用vector(或VertexBuffer)会更有效。

【讨论】:

  • 有趣,但正如你所说,直接使用矢量可能更有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2020-04-23
  • 2012-05-09
  • 1970-01-01
  • 2017-10-05
相关资源
最近更新 更多