【问题标题】:use vector of vectors to draw a ground in opengl使用向量的向量在opengl中绘制地面
【发布时间】:2018-05-23 12:29:35
【问题描述】:

我将向量初始化为:

   vector<vector<GLfloat> > ground_vertices {
   {-10, -0.1, 50},
   {10, -0.1, 50},
   {-10, -0.1, -300},
   {10, -0.1, -300} };

而我的绘图功能是这样的

  void Ground() {
  glBegin(GL_QUADS);                
     for (int i=0; i < 4; i++)
     {
         glColor3f(0.0f, 1.0f, 0.0f);
         glVertex3f(ground_vertices[i]);
     }
  glEnd();

}

但我一直得到

ground.cpp|37 col 40 错误|无法将“__gnu_cxx::__alloc_traits > ::value_type {aka std::vector}”转换为“GLfloat {aka float}”,以将参数“1”转换为“void glVertex3f(GLfloat, GLfloat, GLfloat)”

我想知道我该如何解决它。谢谢!

【问题讨论】:

  • 在 begin-end 块中使用 for 循环从来没有是一个好主意。这段代码不仅在十年前就被弃用了,而且在现代 OpenGL 中完全不起作用,而且自 20 年 以来它也完全被顶点数组所取代。
  • @derhass 你好!谢谢你的意见。那你建议用什么?
  • Vertex Buffer Objects 最好是现代 OpenGL 的教程,例如 paroj.github.io/gltut/open.gl

标签: c++ c++11 opengl vector


【解决方案1】:

使用函数glVertex3fv(const GLfloat * v)并将指向顶点数据的指针传递给它。

您可以通过std::vector::data 获得指向std::vector 中包含的数据的指针:

glVertex3fv(ground_vertices[i].data());


请注意,使用glVertex3f(GLfloat x, GLfloat y, GLfloat z) 的正确编码是:

glVertex3f(
    ground_vertices[i][0],
    ground_vertices[i][1],
    ground_vertices[i][2]);

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2011-07-03
    • 2023-01-11
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多