gpt4 book ai didi

c++ - OpenGL - 绘制带纹理正方形的最简单方法

转载 作者:行者123 更新时间:2023-11-27 22:57:26 25 4
gpt4 key购买 nike

通常我画一个正方形的纹理是这样的:

  • 创建一个具有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com