- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
只是想确保我正确理解这一点(我会在 SO Chat 上问,但它已经死在那里了!):
我们有一个顶点数组,我们通过绑定(bind)它使其成为“当前”
然后我们有一个缓冲区,我们将其绑定(bind)到目标
然后我们通过 glBufferData
填充该目标
它基本上填充了绑定(bind)到该目标的任何内容,即我们的缓冲区
然后我们打电话glVertexAttribPointer
它描述了数据的布局方式——数据是绑定(bind)到 GL_ARRAY_BUFFER
的任何内容。
并且这个描述符被保存到我们原来的顶点数组中
(1)我的理解正确吗?
documentation关于一切如何关联的内容有点稀疏。
(2) 是否有某种默认的顶点数组?因为我忘记/省略了glGenVertexArrays
和 glBindVertexArray
没有它,我的程序运行良好。
编辑:我错过了一步... glEnableVertexAttribArray
.
(3)当时的Vertex Attrib是否绑定(bind)到Vertex Array glVertexAttribPointer
被调用,然后我们可以通过 glEnableVertexAttribArray
启用/禁用该属性在任何时候,无论当前绑定(bind)的是哪个顶点数组?
或 (3b) 顶点属性是否与当时的顶点数组相关联 glEnableVertexAttribArray
被调用,因此我们可以通过调用 glEnableVertexAttribArray
将相同的顶点属性添加到多个顶点数组中。在不同的时间,何时绑定(bind)不同的顶点数组?
最佳答案
一些术语有点偏离:
Vertex Array
只是一个包含顶点数据的数组(通常是 float[]
)。它不需要绑定(bind)到任何东西。不要与 Vertex Array Object
混淆或 VAO,我稍后会介绍 Buffer Object
,通常称为 Vertex Buffer Object
存储顶点时,或简称 VBO,就是您所说的 Buffer
. glVertexAttribPointer
工作原理与 glVertexPointer
完全一样或 glTexCoordPointer
工作,只是代替命名属性,您可以提供一个数字来指定您自己的属性。您将此值传递为 index
.所有您的 glVertexAttribPointer
下次您拨打 glDrawArrays
时,电话将排队等候或 glDrawElements
.如果您绑定(bind)了 VAO,VAO 将存储您所有属性的设置。 glEnableVertexAttribArray(0);
启用它。 . glBindBuffer(GL_ARRAY_BUFFER, myBuffer);
. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
.按参数顺序:0 是你定义的属性,3 是每个顶点的大小,GL_FLOAT
是类型,GL_FALSE
意味着不对每个顶点进行归一化,最后 2 个零意味着顶点上没有步幅或偏移。 glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(0);
glUseProgram()
中调用,并且您有一个可以正确使用着色器的渲染系统。但是假设您有 5 个不同的属性,顶点、texcoords、法线、颜色和光照贴图坐标。首先,您将制作一个
glVertexAttribPointer
调用这些属性中的每一个,并且您必须事先启用所有属性。假设您按照我列出的方式定义属性 0-4。您可以像这样启用所有这些:
for (int i = 0; i < 5; i++)
glEnableVertexAttribArray(i);
glVertexAttribPointer
来电,来自
glVertexAttribPointer(0,...);
至
glVertexAttribPointer(4,...);
分别用于顶点到光照贴图坐标。
Vertex Array Object
或 VAO 用于存储所有
glVertexAttribPointer
的状态当
glVertexAttribPointer
中的每一个时,调用和目标 VBO打了电话。
glGenVertexArrays
生成一个.要将您需要的所有内容存储在 VAO 中,请将其绑定(bind)
glBindVertexArray
,然后进行完整的绘制调用。所有的绘制绑定(bind)调用都会被 VAO 拦截和存储。您可以使用
glBindVertexArray(0);
解除绑定(bind) VAO
glVertexAttribPointer
调用,你只需要绑定(bind) VAO 与
glBindVertexArray
然后拨打
glDrawArrays
或
glDrawElements
并且您将绘制完全相同的内容,就像您进行所有这些方法调用一样。之后您可能也想解除绑定(bind) VAO。
glBindVertexArray(0);
作为绑定(bind)到“默认”VAO ...
关于opengl - glVertexAttribPointer 澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8704801/
在此链接中:http://www.sencha.com/blog/spotlight-ext-js-customers/ 请滚动到部分:为什么我们选择 Ext JS 有这一行: By using Ex
只是想确保我正确理解这一点(我会在 SO Chat 上问,但它已经死在那里了!): 我们有一个顶点数组,我们通过绑定(bind)它使其成为“当前” 然后我们有一个缓冲区,我们将其绑定(bind)到目标
我正在学习与 Java Swing 一起使用的类(class),但我遇到了障碍。在这个项目中,我们正在为不同的组件设置大小,但是,导师特意敲了一行我不太理解的代码,我只是在寻找这行代码概念的解释。 基
所以我尝试创建一个 HttpsRequest,效果非常好。问题是,我做错了什么,我认为这可能是因为我使用 HttpResponse,但我没有找到任何与 Https 类似的东西。有没有一种方法可以像 h
我正在阅读 Martin Fowler 的“UML distilled”,在阅读关联类的过程中,我得到了这句话: What benefit do you gain with the associati
我只是询问此说明: String[][] s = new String[2][2]; 如果我创建这个变量“s”,我会创建一个包含 2 行和 2 列的字符串表吗?或者 2 个表有 2 个元素?感谢您的澄
我目前正在做的事情需要为世界各地的用户提供本地化时间。所有日期时间都存储为 UTC,因此转换它们非常容易,并且我们有一个已知的、安全的引用点等等。 但是,关于如何表达偏移量的一些事情让我摸不着头脑。
我开始学习 spring,我遇到了一个定义,它说“Spring 使开发人员能够在没有应用程序服务器的情况下进行企业开发”。 这到底是什么意思,使用应用服务器进行企业开发有什么危害。 但是开发者在进行企
我是 AngularJS 的新手,对如何设置 angularJS 进行开发感到困惑。 Link1 link1 说我们需要 node.js 和一系列其他工具,这些工具必须在使用 AngularJS 之前
我是 iPhone 和 iPad 应用程序的开发者。 我的一个应用程序是在线个人财务管理工具的配套应用程序,该工具通过网站提供其服务和功能。这些功能的一部分将通过我正在创建的原生 iOS 应用程序提供
我正在研究飞行模拟器。我读过一篇关于四元数的教程(这个:http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quater
抱歉,如果这是一个微不足道的问题: 实现 1: class Foo { protected: int bar; public: Foo(int bar) {
作为 C 中实现定义行为的示例。C 标准规定数据类型的大小是实现定义的。因此,假设 sizeof(int) 是实现定义的。 此实现定义的行为是否意味着 size(int) 依赖于平台或由编译器供应商定
从理论上讲,inline 函数在 C 语言中具有内部/静态链接,也就是说,它们仅在单个翻译单元内可见。因此,在两个单独的文件中定义的内联函数应该无法相互看到,并且两者都有自己的地址空间。 我正在尝试使
对于神童来说,这可能是一个非常基本的问题。但我对处理它有疑问。 在转换期间我们使用: int.Parse(someThing) Convert.ToInt32 或 Convert.ToString()
这个问题在这里已经有了答案: Regarding Android Permissions and Signature Protection level (2 个答案) 关闭 8 年前。 由于我是An
我有这个功能: 函数 Foo(){} 根据这张图片: >> Foo.prototype -> Foo {} 所以如果我写: Foo.prototype.constructor 现在 - 它引
我读了this article关于 Task.ConfigureAwait,它有助于防止异步代码中的死锁。 看看这段代码:(我知道我不应该做 .Result ,但这是问题的一部分) private v
我正在学习 C#。我可以将闭包理解为一种可以适应其定义环境中的变化的结构吗。 示例: List gurus = new List() {
这个问题在这里已经有了答案: Difference between volatile and synchronized in Java (4 个回答) 关闭6年前。 我对我读到的关于 volatile
我是一名优秀的程序员,十分优秀!