OpenGL中使用元素缓冲数组绘制两个矩形,运行结果第一个矩形的最后一个点,会与第二矩形的第一个点相连成一条线,不知道什么原因?如何修改?
我选择的图元:gl.line_strip
OpenGL中使用元素缓冲数组绘制两个矩形,运行结果第一个矩形的最后一个点,会与第二矩形的第一个点相连成一条线,不知道什么原因?如何修改?
我选择的图元:gl.line_strip
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题解答: 这个问题是由于元素缓冲数组的顺序造成的。因为我们使用的是gl.line_strip这个图元,它会根据数组中的顺序依次连接点来绘制线段。如果我们的元素缓冲数组的顺序是错乱的,就会导致某些点连接错误,造成看起来像是一个点连接的两个线段。 要解决这个问题,我们需要保证元素缓冲数组的顺序是正确的,这样绘制时就会按照我们预期的顺序连接点。在这个问题中,我们可以将第一个矩形的最后一个点和第二个矩形的第一个点分别放在两个不同的元素缓冲数组中,这样绘制时就不会产生错误的连接。 下面是一个修改后的例子,可以按照这个示例来修改你的代码:
// 定义顶点数组
float vertices[] = {
// 第一个矩形
-0.5f, 0.5f, 0.0f, // 左上角
-0.5f, -0.5f, 0.0f, // 左下角
0.5f, -0.5f, 0.0f, // 右下角
0.5f, 0.5f, 0.0f, // 右上角
// 第二个矩形
0.5f, -0.5f, 0.0f, // 左下角
0.5f, 0.5f, 0.0f, // 左上角
1.5f, 0.5f, 0.0f, // 右上角
1.5f, -0.5f, 0.0f, // 右下角
};
// 定义元素缓冲数组
unsigned int indices[] = {
0, 1, 2, 3, // 第一个矩形
6, 7, 4, 5 // 第二个矩形
};
// 创建顶点缓冲对象和元素缓冲对象,绑定数据
unsigned int VBO, EBO;
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
// 绘制
glDrawElements(GL_LINE_STRIP, 8, GL_UNSIGNED_INT, 0);
在这个例子中,我们将第一个矩形和第二个矩形的元素缓冲数组分别定义为4个和4个顶点,然后按照正确的顺序将它们连接起来。这样绘制时就不会出现线段连接错误的情况了。