OpenGL -最简单的方法来绘制一个正方形与纹理
OpenGL - Easiest way to draw a square with a texture
我通常用这样的纹理画一个正方形:
- 创建具有4个坐标的VBO(正方形为a,B,C,D)
- 创建一个EBO,有4个索引(a,C,D和B,C,D),告诉我想从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);
}
映射变量告诉fragmentshader纹理坐标是什么
没有一个最简单的方法没有EBO数组吗?
复制顶点&使用glDrawArrays()
您可以使用DrawArray来绘制索引
像这样:
Vertex2D* vertex = (Vertex2D*) vbo->lock();
vertex[0].x = x[0]; vertex[0].y = y[0]; vertex[0].u = u[0]; vertex[0].v = v[0]; vertex[0].color = color;
vertex[1].x = x[0]; vertex[1].y = y[1]; vertex[1].u = u[0]; vertex[1].v = v[1]; vertex[1].color = color;
vertex[2].x = x[1]; vertex[2].y = y[1]; vertex[2].u = u[1]; vertex[2].v = v[1]; vertex[2].color = color;
vertex[3].x = x[1]; vertex[3].y = y[0]; vertex[3].u = u[1]; vertex[3].v = v[0]; vertex[3].color = color;
vbo->unlock();
shader->bind();
vbo->bind();
vao->bind();
tex->bind();
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
tex->unbind();
vao->unbind();
vbo->unbind();
shader->unbind();
相关文章:
- 在 OpenGL 中旋转一个正方形
- 我无法完全理解这段代码来检查一个完美的正方形
- 编写一个函数,用递归函数检查数字是否是正方形
- 我的任务是在框架内打印一个字符串,例如一个正方形
- 找出一个正方形逻辑中可能的网格数量,但代码不接受超过六个输入,它停止并说.exe停止工作
- OPENCV:为击中创建一个正方形结构元素
- 创建一个正方形大小可变的棋盘
- QPixmap将绘制的正方形的内容复制到另一个图像中
- 在正方形矩阵中,每个单元格都是黑色或白色.设计了一个算法来寻找最大白色子平方
- DirectX 11制作一个正方形
- 读取 4 点的坐标.他们做一个正方形吗?
- 我需要使用嵌套的 while 循环打印一个正方形。我想我已经用正确的逻辑对其进行了编码,但它没有给我所需的输出
- 图标是SFML中的一个暗正方形
- 正方形作为一个类
- 是否有一个c++源/lib来解决2D Bin Packing使用矩形Bin(而不是正方形)和旋转
- 如何计算一个非正方形(矩形)矩阵的正交基
- 如何制作一个当用户按下某些键时改变颜色的正方形
- 显示一个棋盘与每个正方形作为一个对象- c++ QT
- 我必须在c++中画一个正方形里面的正方形
- OpenGL -最简单的方法来绘制一个正方形与纹理