Modern OpenGL 3.0:如何在屏幕上移动2D vbo

时间:2015-05-25 13:18:26

标签: c++ opengl opengl-es

我已经学习了几周的现代OpenGL(3.0)并且正在尝试用2D创建月球登陆器克隆。到目前为止我读过的所有教程和问题都没有任何帮助。

标题和其他OpenGL中的顶点:

GLuint vertexArrayLander;
GLuint landerVBO;
GLfloat landerVertex [26] = {

        //Lander Body
           0.03f, 0.2f,
          (-0.03f), 0.2f,
          (-0.05f), 0.15f,
          (-0.05f), 0.1f,
          (-0.03f), 0.05f,

          (-0.045f), 0.0f,      //left leg
          (-0.029f), 0.05f,

          (0.029f), 0.05f,      //right leg
          (0.045f), 0.0f,

          0.03f, 0.05f,     
          0.05f, 0.1f,      
          0.05f, 0.15f,     
          0.03f, 0.2f

};

构造

Lander::Lander() {    
glGenVertexArrays(1, &vertexArrayLander);
glBindVertexArray(vertexArrayLander);

glGenBuffers(1, &landerVBO);    
glBindBuffer(GL_ARRAY_BUFFER, landerVBO);   
glBufferData(GL_ARRAY_BUFFER, sizeof(landerVertex), landerVertex,GL_STATIC_DRAW);
 }

到目前为止,绘图是有效的,但是如何将x和y应用到我的landerVbo而不直接搞乱数组呢? 我尝试过使用glTranslatef(x,y,0.0f),它根本没用。

绘图方法:

void Lander::drawLander() {
float x = position->getX();
float y = position->getY();

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, landerVBO);
glVertexAttribPointer(0,           // attribute 0. No particular reason.
        2,                  // size
        GL_FLOAT,           // type
        GL_FALSE,           // normalized?
        0,                  // stride
        (void*) 0            // array buffer offset
        );


//draw all graphic elements

//How to apply x and y on all points?

glDrawArrays(GL_LINE_STRIP, 0 , 13);
//vao

glDisableVertexAttribArray(0);
}

x和y是着陆器在屏幕上的位置。 我想要绘制的是这个伪代码:

GLfloat landerVertex [26] = {

        //Lander Body
          x + 0.03f, y + 0.2f,
          x + (-0.03f), y + 0.2f,
          x + (-0.05f), y + 0.15f,
          x + (-0.05f), y + 0.1f,
          x + (-0.03f), y + 0.05f,

          x + (-0.045f), y + 0.0f,      //left leg
          x + (-0.029f), y + 0.05f,

          x + (0.029f), y + 0.05f,      //right leg
          x + (0.045f), y + 0.0f,

          x + 0.03f, y + 0.05f,     
          x + 0.05f, y + 0.1f,      
          x + 0.05f, y + 0.15f,     
          x + 0.03f, y + 0.2f

};
  • 我使用着色器是否很重要?
  • 如何在不直接弄乱顶点数组的情况下移动我的vbo顶点?
  • 我到底在哪里正确定义和绘制图形对象?
  • 如何在现代OpenGL中完成移动对象?

1 个答案:

答案 0 :(得分:1)

  • 不再推荐尝试使用固定管道(无着色器),但仍然可以使用(GPU会模拟它)。
  • 您仍然可以使用opengl 1语法(glTranslatef等)
  • 在glDrawArrays之前。您需要一如既往地设置适当的矩阵。
  • 通常,用户可以指定自己的模型/视图/投影矩阵,并将它们发送到着色器来计算输出。通常不会触及静态网格物体的网格数据(因此您可以重复使用它等等。)