问题标签 [vertex-buffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
516 浏览

ios - 新手:使用有序顶点数组绘制 OpenGL ES 形状

我是 OpenGL ES 的新手,但对 Objective-C 和 iOS 开发非常有经验。到目前为止,通过使用以下代码定义顶点数组和相应的索引数组,我使用顶点缓冲区对象绘制和着色形状没有问题

然后使用以下代码绘制到屏幕:

这对于我可以在代码中定义自己的基本形状来说都很好。现在我已经有人生成了从 3D 图形程序导出的 .h 文件,其中包含定义形状所需的信息,但它们不包含索引数组。相反,索引信息以某种方式嵌入到顶点数组中。顶点数组具有重复的坐标,这些坐标定义了它们的绘制顺序。请参阅下面的示例代码。我现在还有一个法线数组和一个纹理坐标数组。谁能告诉我(或指向我的教程/指南)我将如何使用(阅读:绘制)这些数据,而不是像以前那样使用单独的顶点/索引数组?提前致谢!

0 投票
0 回答
530 浏览

c - opengl顶点缓冲区

使用 VertexBuffers 的有效方法是什么?我正在绘制一个简单的立方体(链接到代码)。理想情况下,我应该将顶点加载到 gpu 上一次,然后我不必每次都将它们复制到 gpu(这是我在 renderScene 中所做的,第 115 行)。我怎么做?这里也提供了代码(它来自一个教程):

0 投票
1 回答
3053 浏览

c# - SharpDX 中的动态顶点缓冲区

我在弄清楚如何使用 SharpDX 设置动态 VertexBuffer 和 IndexBuffer 时遇到很多问题。

我必须在用户在屏幕上按下的任何地方生成三角形。

我想我必须设置一个转换函数,将我的屏幕坐标转换为投影坐标。

但我从来没有走到这一步……

我想为 10000 个顶点设置一个带有空间的缓冲区。

每次我必须使用以下方法添加新三角形时,我都想更新该缓冲区:

updateVB 是要添加的新三角形。

渲染的工作方式如下:

我是 DirectX 的新手,网上的 DirectX9 教程对我使用 DirectX11.1 并没有很好的帮助。

谢谢

0 投票
2 回答
532 浏览

opengl - OpenGL如何知道每个顶点缓冲对象是什么类型?

我刚刚阅读了有关顶点数组对象和顶点缓冲区对象的教程,但我无法从以下代码中弄清楚 OpenGL 如何知道第一个 VBO ( vertexBufferObjID[0]) 表示顶点坐标,而第二个 VBO ( vertexBufferObjID[1]) 表示颜色数据?

编辑:感谢彼得的回答,我发现以下两行代码将每个 VBO 与着色器连接起来(索引 0 和 1 与 VBO 索引相关):

0 投票
1 回答
12669 浏览

opengl - 更新 VBO 中的顶点数据(glBufferSubData vs glMapBuffer)

我想在创建 VBO 后更新对象的顶点列表。我见过两者glBufferSubDataglMapBuffer而且它们似乎都在做类似的事情,这意味着我现在不确定该使用哪一个。

我的伪工作流程是:

创建对象
开始顶点更新(使用 data = nullptr 调用 glBufferData)
更新对象的顶点
结束顶点更新(获取更新的顶点并调用glBufferSubDataglMapBuffer

0 投票
1 回答
313 浏览

ipad - 如何将 glVerttexAttribPointer 与 glBufferData 结合使用?

在 iOS 5 的股票“旋转立方体”OpenGL 示例中,他们有以下代码:

混乱的部分是glVertexAttribPointer. 文档说最后一个参数是指向数组的指针。

但在这个程序中,他们使用的是直数。确实,BUFFER_OFFSET定义为

那么他们是否依赖于gCubeVertexData从内存地址 0 开始的数组?

所以,我不明白两件事:

  1. 为什么当我“更正”第三行代码时示例不起作用(没有绘制立方体)

    /li>
  2. 调用 glVertexAttribPointer 的正确方法是什么?

我认为你应该为最后一个索引传递一个内存指针,如文档所述。实际上,这里的另一个示例使用了 glVertexAttribPointer:

所以你在后一个例子中看到他们传递了指针(最后一个参数)的内存地址,而不是直数。

0 投票
1 回答
2126 浏览

ios - 绑定第二个顶点缓冲区似乎破坏了我的第一个顶点缓冲区,OpenGL OES ios 5.1

我正在创建两个不同的顶点缓冲区,它们使用两个不同的着色器来渲染它们。一旦我绑定第二个顶点缓冲区,我停在第一个顶点缓冲区中的数据似乎已损坏或丢失。

如果我只生成并绘制一个顶点缓冲区,如下所示:

然后,在 draw() 循环中,

然后它工作正常,没有问题,没有错误(每次gl* 调用后我都是 glGettingLastError() ,所以看起来这段代码非常好)

现在,如果我生成并绑定第二个顶点缓冲区,那么在第一个顶点缓冲区生成并绑定之后的任何时间,

一旦我glBindBuffer使用这个新生成vb2的缓冲区调用,似乎其中的数据vb1已完全转储或丢失。在尝试绘制vb1(不是vb2!)时,我遇到了这个崩溃:

在此处输入图像描述

我什至用GL_STATIC_DRAW.

我不明白,我认为这些顶点缓冲区应该保留数据,即使创建并初始化了另一个顶点缓冲区?.. 我究竟做错了什么?

0 投票
1 回答
581 浏览

ios - 在 iOS 5.1 上的 OpenGL ES 应用程序中,他们真的使用他们声明的顶点数组吗?

在您获得的股票 OpenGL ES 应用程序中(当您在 XCode 中创建新的“OpenGL 游戏”时),在setupGL函数中,有:

但是,似乎没有使用顶点数组(据我所知,顶点数组保留在客户端内存中,而顶点缓冲区则停在 OpenGL 服务器内存中)。

如果您注释掉这些glBindVertexArrayOES命令,代码似乎完全一样。

glBindVertexArrayOES此 xCode 示例中的调用是否无关紧要?

0 投票
2 回答
6356 浏览

ios - 如何在 OpenGL Es 2.0 中正确更新顶点数组?

当我在 OpenGL 2.0 中更新 iOS 上的顶点数组时,原始顶点数据保留在屏幕上——即第一次刷新是持久的(我发送到 GPU 的初始点集每帧都被渲染),但第二次刷新,第 3 次,第 4 次,.. 第 n 次刷新似乎都覆盖了相同的内存。

所以我在做:

在随后的帧中,我只是再次调用:

我也试过

但是通过这两种方式,我得到了这个:

在此处输入图像描述

白点是初始数据,红点是后续调用的结果glBufferData

所以这个问题有几个部分关于 OpenGL ES 2.0 中的动态 vbo:

  1. 创建动态顶点缓冲区的正确命令顺序是什么,其元素将在每一帧上完全更新?

  2. 顶点缓冲区可以在帧之间增长吗? 还是我必须冲洗完全相同的尺寸?

  3. 我知道使用“客户端内存”指针,您可以在 OpenGL ES 2.0 中执行此操作(以避免 memcpy)还是不推荐使用,应该专门使用顶点缓冲区?

0 投票
1 回答
2448 浏览

opengl - VAO 如何保持缓冲区绑定?

我很难理解 VAO 究竟是如何处理缓冲区映射的。我正在做的事情可以用这个伪代码来描述:

  1. 当调用 DrawElements 时,OpenGL 使用绑定的 VAO 来解析数组和元素缓冲区绑定是否正确?在 Draw 调用之后,绑定的数组缓冲区为 0,但元素缓冲区仍然是用于 Draw 的缓冲区。

  2. 在 VAO 设置期间是否必须分配缓冲内存?如果在设置后调用 BufferData,VAO 会失效吗?