当前位置: 首页 > 知识库问答 >
问题:

我在努力理解着色器中的一些东西

谭梓
2023-03-14

我正在youtube上观看opengl的EchernoProject教程,在写opengl中的着色器一集中,他用一行定义了位置属性在着色器中的起始位置:

layout(location = 0) in vec4 positions;

但我的问题是,为什么他需要这样做,因为当他以前像这样使用glVertexAttribPointer时:

glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);

所以在这里,他指定了如何读取缓冲区,包括第一个位置属性索引,那么为什么他还需要像上面一样在着色器中指定它呢?

共有1个答案

荀金鹏
2023-03-14

所以在这里,他指定了如何读取缓冲区,包括第一个位置属性索引,那么为什么他还需要像上面一样在着色器中指定它呢?

具体在着色器中指定什么?这个值是一个4个元素的向量?嗯,没有要求着色器属性指定的相应类型与VAO提供的类型完全相同。您可以传递整数,这些整数可以通过规范化或只是“强制转换”转换为浮点数。诸如此类。

从示例中可以看到,着色器中指定的组件数量甚至不必与数组提供的数量匹配。您的数组为该属性发送了2个组件,但着色器需要4个组件。这很好;相应属性中的最后两个值将是0和1。

 类似资料:
  • 问题内容: 我有一个非常基本的问题。 以下代码无法编译(假设Apple扩展了Fruit): 在阅读有关为什么不阅读的内容时,我理解的是单词,但不理解概念:)。 假设第一个Fruit不是抽象类。我知道,由于我们正在处理多个子类型,所有这些子类型都扩展了Fruit。据推测,由于我们无法分辨出确切的水果类型,因此我们无法在集合中放入任何东西。有几件事我不明白: 1)显然我们不知道是哪个水果让我感到困惑。

  • 我真正想做的是使用“RandomNumber”字段,并使用Java类“random”(更具体地说是方法“NextInt()”)将其转换为随机数,然后将其转换为字符串。但我并不真正理解如何在任何地方使用“随机数”字段,我甚至需要getter和setter吗?我可以在任何方法中简单地使用“随机数”作为参数吗? 抱歉,如果这是混淆,非常感谢您的时间!

  • 标准着色器 Unity 标准着色器是一个内置着色器,具有非常全面的功能。它可以用于渲染『真实世界』的对象,例如,石头、木材、玻璃、塑料和金属,并支持各种各样的着色器类型和组合。通过使用或不使用材质编辑器中的各种纹理插槽和参数,可以很容易地启动或禁用其功能。 标准着色器还包括一个称为 物理着色器(Physically Based Shading,PBS) 的高级光照模型。物理着色器以模拟真实世界的方

  • 我正在创建一个支持GPS的导游Android移动应用程序,我决定使用加速度计和磁场传感器。 我知道我可以使用旋转矩阵来找到用户的方向。这篇文章帮助我理解了这些值的含义。将磁场X、Y、Z值从设备转换为全局参考帧 然而,我似乎无法获得旋转矩阵,getRotationMatrix(浮点数I、浮点数R、浮点数重力、浮点数accel)方法具有返回类型布尔值,这不是我需要/期望的浮点数[]返回值。其次,I和R

  • 在Hello Triangle教程中提到,着色器(Shader)是运行在GPU上的小程序。这些小程序为图形渲染管线的某个特定部分而运行。从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。 前面的教程里我们简要地触及了一点着色器的皮毛,并了解了如何恰当地使用它们。现在我们会用一种更加广泛的形式详细解释

  • 我似乎无法理解从顶点到像素的OpenGL管道过程。 有人能告诉我顶点法线在这两种着色技术中有多重要吗?据我所知,在gouraud中,在每个顶点计算照明,然后在顶点之间的多边形上插值结果颜色(在光栅化之前,这是在片段操作中完成的吗?),phong着色包括首先插值顶点法线,然后计算每个法线上的照明。 另一件事是,当凹凸贴图应用于一个平面(2个三角形)和一个砖纹理作为漫反射时,使用其相应的凹凸贴图,所有