【发布时间】:2021-03-23 16:41:11
【问题描述】:
我正在尝试渲染字母 T,但它看起来缺少一点。 当我渲染一个普通的八边形时,它看起来应该是这样的。
这里是字母 T 和一个普通八边形的顶点(前三个浮点数是 (x,y,z),其他三个是 (r,g,b) 表示颜色):
GLfloat octagonVertices[] = {
0.50f, 0.20f, 0.00f, 0.46f, 0.80f, 0.46f,
0.50f, -0.20f, 0.00f, 0.46f, 0.80f, 0.46f,
0.20f, -0.50f, 0.00f, 0.46f, 0.80f, 0.46f,
-0.20f, -0.50f, 0.00f, 0.46f, 0.80f, 0.46f,
-0.50f, -0.20f, 0.00f, 0.46f, 0.80f, 0.46f,
-0.50f, 0.20f, 0.00f, 0.46f, 0.80f, 0.46f,
-0.20f, 0.50f, 0.00f, 0.46f, 0.80f, 0.46f,
0.20f, 0.50f, 0.00f, 0.46f, 0.80f, 0.46f
};
GLfloat tauVertices[] = {
-0.01f, 0.45f, 0.00f, 1.00f, 0.00f, 0.00f,
0.68f, 0.45f, 0.00f, 1.00f, 0.00f, 0.00f,
0.68f, 0.36f, 0.00f, 1.00f, 0.00f, 0.00f,
0.39f, 0.36f, 0.00f, 1.00f, 0.00f, 0.00f,
0.39f, -0.45f, 0.00f, 1.00f, 0.00f, 0.00f,
0.28f, -0.45f, 0.00f, 1.00f, 0.00f, 0.00f,
0.28f, 0.36f, 0.00f, 1.00f, 0.00f, 0.00f,
-0.01f, 0.36f, 0.00f, 1.00f, 0.00f, 0.00f
};
这是我的顶点缓冲区:
glBindVertexArray(vao[1]);
glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(tauVertices), tauVertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (const void*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (const void*)(3 *
sizeof(GLfloat)));
glEnableVertexAttribArray(1);
这是我如何渲染我的形状:
glBindVertexArray(vbo[1]);
glDrawArrays(GL_POLYGON, 0, 8);
【问题讨论】:
-
使用三角形并缝合它。 (4 个三角形)
-
您是如何获得
3 * sizeof(tauVertices)的数据大小的?顶点之间的连通性如何给出?您正在渲染哪种类型的几何图形(三角形、三角形条形...)? -
@Rabbid76 我必须使用 GL_POLYGON,而不是 GL_TRIANGLES
-
@leech 你为什么要这么做?没有可以画多边形,但不能画三角形的OpenGL版本。
-
@BDL 我认为 3 * 是复制 + 粘贴的错误,但它仍然没有解决我的问题。我正在使用 GL_POLYGON