通常我画一个正方形的纹理是这样的:
- 创建一个具有 4 个坐标(A、B、C、D 代表正方形)的 VBO
- 创建一个包含 4 个索引(A、C、D 和 B、C、D)的 EBO,告诉我我想用 2 个三角形画一个正方形。
- 用纹理绘制这个元素
在没有 EBO 阵列的情况下,没有最简单的方法吗?
因为用起来不是很顺手……如果我想这样用:
VAO = [-0.8f, 0.5f, 0.0f, ...]
EBO = [0, 1, 3, 1, 2, 3, ...]
然后我需要从我的 VAO 中删除一个正方形...然后我还需要从我的 EBO 数组中删除索引并重新排列它。 有更好的方法吗?
最佳答案
如果你真的只想画一个带有纹理的正方形,你应该考虑制作一个新的空 VAO,然后调用 glDrawArrays(GL_TRIANGLE_STRIP, 0,3);
顶点着色器看起来像这样:
out vec2 mapping;
void main()
{
float size = 1.0f;
vec2 offset;
switch(gl_VertexID)
{
case 0:
//Bottom-left
mapping = vec2(0.0f, 0.0f);
offset = vec2(-size, -size);
break;
case 1:
//Top-left
mapping = vec2(0.0f, 1.0f);
offset = vec2(-size, size);
break;
case 2:
//Bottom-right
mapping = vec2(1.0, 0.0);
offset = vec2(size, -size);
break;
case 3:
//Top-right
mapping = vec2(1.0, 1.0);
offset = vec2(size, size);
break;
}
gl_Position = vec4(offset, 0.0f, 1.0f);
}
映射变量告诉片段着色器纹理坐标是什么。
关于c++ - OpenGL - 绘制带纹理正方形的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347833/