我已经学习了几周的现代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
};
答案 0 :(得分:1)