问题标签 [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.
opengl - 使用 glDrawElements 很难理解索引
我正在尝试绘制地形,GL_TRIANGLE_STRIP
但是glDrawElements
我很难理解背后的索引glDrawElements
...
这是我到目前为止所拥有的:
我相信我vArray
是正确的,我在绘图时使用相同的值glBegin(GL_TRIANGLE_STRIP)/glEnd
,效果很好。
我的猜测是只使用每个x
顶点的坐标索引。但我不知道这是否是使用索引的正确方法glDrawElements
。
- 0:从三角形第一个顶点开始的 x 坐标索引。位置:(-128,-128)。
- 768:从三角形的第二个顶点开始的 x 坐标的索引。位置:(-128,-127)
- 3:从三角形第三个顶点开始的 x 坐标索引。位置:(-127,-128)
- 771:从第四个顶点开始的 x 坐标的索引,它将绘制第二个三角形。位置:(-127,-127)。
我认为到目前为止一切都有意义吗?
不起作用的是上面的位置值(我加倍检查vArray
并且它们是正确的)与glDrawElements
正在使用的不同。绘制了两个三角形,但它们比应有的大得多。它正确地从 (-128, -128) 开始,但它会变成 (-125, -125) 而不是 (-127, -127)。
我不明白我在这里做错了什么......
opengl - 退化三角形和 GL_TRIANGLE_STRIP 的问题
我正在尝试仅通过一次调用来绘制多个三角形条,glDrawElements
我对此事的研究告诉我我需要使用退化三角形。也许我对这个主题的理解是错误的,但我认为这应该让我从一条带“跳”到另一个。
我的整个代码可以在我发布的这个最近的问题上找到,如果你认为它是相关的,可以看看那里。
当然,我基本上是在尝试用 4 个三角形绘制 2 个四边形(为了简化目的),但彼此分开。为此,我使用这样的索引:
第一个条带的第一个顶点从 0 开始,第二条带的第一个顶点从 256 开始。这是该索引的最终结果:
这是正确的还是我认为“连接”两个四边形的线根本不应该存在?
c++ - 顶点缓冲区数据的内存管理
假设我需要渲染静态图片(100 颗星)。我将星数据(位置、颜色、大小)生成到 std::vector 星;
然后我创建了一个用于 D3D 渲染的类,它包含一个缓冲区:
在ctor中,我以这种方式对其进行初始化:
之后我可能会销毁 std::vector,因为它不再需要。
问题是:
spDevice->CreateBuffer(&vertexBuffDescr, &initVertexData, &m_spStarBuffer));
这种和平的代码将在哪里进行内存分配?是图形内存还是当前进程内存?当我不再需要渲染星系地图时(例如,当我想移动到不需要星系地图的下一个级别时),我将销毁 CGalaxyMapRenderer。dtor 中会自动销毁 m_spStarBuffer。问题是:清除所有缓冲资源是否足够?或者我应该采取一些额外的步骤来释放内存?
opengl - 将顶点和索引缓冲区上传到 GPU
我正在创建一个地形引擎,目前我正在将整个地形 VB(顶点缓冲区)和 IB(索引缓冲区)一次上传到 GPU,因为地形并不大。目前是 256x256。
现在,假设我想创建一个程序地形,它使用 perlin 噪声来生成高度图。
当然,我可以生成“补丁”并将补丁的所有 VB 和 IB 一次上传到 GPU,但是当玩家移动很远并且必须生成新补丁时,我将不得不生成新补丁并上传将它们发送到 GPU。我心中的困惑或问题是:
将VB和IB上传到GPU很慢吗?当数据上传到 GPU 时,播放器会注意到闪烁吗?
如果我将补丁的VB和IB逐步上传到GPU而不是一次全部上传,性能会更好吗?基本上我在问VB和IB的大小是否很重要。
任何有关此概念的信息将不胜感激。
谢谢!
ios - OpenGL ES2 顶点数组对象帮助
我无法理解如何在 OpenGL ES2(在 iOS 上)中使用 VAO 并让它们工作。我当前的渲染设置如下所示(在伪代码中):
初始化:
渲染一个框架:
这很好用,但是,两个 VBO 都具有完全相同的交错顶点属性结构,并且如您所见,我正在为每个 VBO 的每一帧设置和启用每个属性。Instruments 抱怨对 glVertexAttribPointer() 和 glEnableVertexAttribArray() 的冗余调用,但是当我将其中一个或两个移动到初始化阶段时,我要么在调用 glDrawElements 时得到 EXC_BAD_ACCESS,要么什么都没有绘制。
我的问题是我是否需要在每一帧都这样做,如果我不这样做为什么它不起作用,以及我将如何使用 VAO 来解决这个问题。
opengl - OpenGL顶点缓冲区对象,我可以访问顶点数据以用于其他用途,例如碰撞检测吗?
我目前正在使用 Superbible 第 5 版附带的 GLTools 类。我正在查看 GLTriangleBatch 类,它具有以下代码:
据我了解,代码传递指针 pVerts、pNorms、pTexCoords、pIndexes 的数组并将它们存储在顶点数组对象中,该对象本质上是顶点缓冲区对象的数组。这些存储在 GPU 的内存中。然后删除原始指针。
我有兴趣访问顶点位置,它们保存在 pVert 指向的数组中。
现在我的问题围绕着碰撞检测。我希望能够访问我的 GLTriangleBatch 的所有顶点的数组。我可以vertexBufferObject
稍后使用某种 getter 方法通过 获取它们吗?最好只保留 pVerts 指针并为此使用 getter 方法吗?我在考虑性能方面,因为我希望将来实现一个 GJK 碰撞检测算法......
opengl - 如何修复以下 gcc 警告?
我已经开始学习 OpenGL 并设法使用顶点缓冲区对象创建一个旋转立方体。但是,当我编译我的代码时,gcc 会发出以下警告:
我应该怎么做才能修复这些警告?
这是我的代码:
此外,我使用以下命令编译我的代码:gcc sdlogl.c -g -Wall -lSDL -lGL -lGLU
opengl - 经典的“什么都没有被渲染”的 OpenGL 问题
我知道,这很令人沮丧。我无法在我的 OpenGL 应用程序中显示任何内容——我看到的只是一个空的视口。
当我第一次开始编写应用程序时,我是手动绘制顶点(使用GL_QUADS
)并且一切正常。然后我决定改用VBO (V ertex B uffer O bjects )。现在没有任何效果。
这是顶点的结构:
如您所见,它非常简单 - 顶点和 RGBA 颜色数据的 x 和 y 坐标。这是填充顶点和索引缓冲区的代码:
最后但同样重要的是,这里是应该绘制矩形的代码:
我不知道为什么什么都没有被渲染。顶点和颜色数据与使用glVertex2f()
.
iphone - OpenGL ES 2.0 和顶点缓冲对象 (VBO)
我不知道如何在 iphone 的 opengl es 2.0 中为我的地形使用顶点缓冲区对象。这是静态数据,所以我希望通过使用 VBO 来提高速度。在常规 OpenGL 中,我使用显示列表和着色器没有问题。但是,在 opengl es 2.0 中,我必须将顶点数据作为属性发送到着色器,并且不知道这如何与 VBO 一起使用。顶点缓冲区在调用时如何知道将顶点数据绑定到哪个属性?这在opengl es 2.0中甚至可能吗?如果没有,还有其他方法可以优化静态地形的渲染吗?
directx - 在directx 9中使用带有固定功能管道的setvertexdeclaration
我正在尝试使用我自己的顶点结构,将顶点上传到顶点缓冲区(索引到索引缓冲区,没有 FVF 代码),设置顶点声明和流源并使用,并使用带有固定着色器的 DrawIndexedPrimitive 绘制它们(但不是FVF)。
我是否必须编写自己的着色器才能使用 directx 9 SetVertexDeclaration ?我可以使用带有 SetVertexDeclaration 和 fixed-pipeline 的自定义顶点结构吗?如果可以,对固定管道和顶点声明有任何限制吗?
自定义顶点结构: