问题标签 [index-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.
c++ - 索引究竟是如何工作的?
据我了解,OpenGL 中的 indexing 或IBO
s 主要用于减少为给定几何图形绘制所需的顶点数。我知道使用索引缓冲区,OpenGL 只绘制具有给定索引的顶点并跳过任何其他顶点。但这不是消除了使用纹理的可能性吗?据我所知,如果您跳过带有索引缓冲区的顶点,它也会跳过它们的顶点属性吗?如果我的顶点属性设置如下:
然后使用索引缓冲区glDrawElements(...)
,这不会消除纹理的使用,还是v_Position
会“重用”?如果他们不这样做,我如何在使用索引缓冲区时纹理?
android - 在x或y轴上反射顶点后如何恢复CCW缠绕顺序?
我在 OpenGL 中渲染一个多边形,其中一个顶点数组被调用vertices
,一个final
索引缓冲区被称为DRAW_ORDER
CCW 绕组。我启用了背面剔除,并使用glDrawElements(GL_TRIANGLES, DRAW_ORDER.capacity(), GL_UNSIGNED_SHORT, DRAW_ORDER)
.
当我vertices
通过矩阵变换在 x 或 y 轴上反射时,多边形被剔除,因为反射反转了顶点的方向,因此它们不再匹配DRAW_ORDER
.
我可以通过禁用剔除来防止该问题,但为了性能起见,我宁愿找到一种方法来恢复vertices
通过排列的方向。例如,如果多边形是三角形,我可以简单地在反射后交换第二个和第三个顶点以恢复 CCW 方向。如何将此方法扩展到具有任意数量的顶点和索引的多边形?
编辑:这是一个似乎适用于凸多边形但不适用于凹多边形的解决方案。
您可以在下图中看到该解决方案如何适用于椭圆(凸形)而不是星形(凹形)。
c++ - 在 DirectX 11 中使用索引缓冲区;它怎么知道?
假设我为两个不同的网格创建了两个顶点缓冲区。
现在,假设我想使用索引缓冲区绘制其中一个网格。看这本书Practical Rendering and Computation with Direct3D 11它似乎并不像索引缓冲区的创建以任何方式引用顶点缓冲区,那么索引缓冲区如何知道(在输入组装期间)要作用的顶点缓冲区?
我做了一些没有答案的谷歌搜索,这让我假设我缺少一些明显的东西。
directx-11 - DX11:索引绘图不产生任何视觉输出
对于我们的学生项目,我一直在修改一个 OBJ 加载器,以便将模型导入我们的应用程序。它加载没有问题,并且在没有索引的情况下绘制它(模型显然没有正确表示,因为我没有使用索引缓冲区)但是,DeviceContext->DrawIndexed
在屏幕上绘制什么都没有。
缓冲区创建方法:
绘制方法:
我到底在想什么?我看过几本关于索引绘图的书,看起来很简单。起初我认为缠绕顺序是相反的,但我通过简单地反转索引数组来检查这一点;同样的结果。
如果您需要更多代码,请告诉我,但我觉得这应该足够了。
提前致谢!
编辑:OT:我从来没有想过如何让我的代码正确格式化,所以我为此道歉,请随时分享这是如何完成的。
c++ - 一个一个地加载对象时,OpenGL索引缓冲区不起作用
我正在学习 OpenGL 并遇到了“障碍”。我使用索引缓冲区画了一些房子(块和金字塔)。当将所有顶点(来自所有房屋)加载到顶点缓冲区并使用 1 个大索引缓冲区时,这可以正常工作。现在我想为对象设置动画并将它们一个一个加载到顶点缓冲区中,这样我就可以一个一个地对对象执行转换。代码与一个大缓冲区没有太大区别,但是当我这样做时,我只是看到一些随机形状在屏幕上四处飞舞。我的代码如下:
我有一个包含 3D 对象列表的世界类,有一个所有顶点的大列表(用于试验目的),一个大的索引列表(也是试验)和一种将 Object3D 对象添加到世界的方法。
};
Object3D 类:
World AddObject 方法,简单地将对象添加到“objects”列表中,并将顶点和索引添加到“Vertices”和“Indices”列表中以创建一个大缓冲区:
当我使用所有顶点和索引(如下所示)渲染大缓冲区时,它工作正常。
}
当我循环遍历对象并将对象的顶点加载到缓冲区中时,一次一个对象(如下所示)它会显示一些随机的“形状”,这些形状会保持“四处射击”或快速变化。我在这里做错了什么?提前感谢您的任何建议。
更新缓冲区方法:
对于第一个 Render 方法(没有循环),缓冲区在 init 方法中创建一次,如下所示:
c# - C# Assimp lib 无法获取索引信息
我正在为 C# 使用 Assimp。我导入 fbx 文件。我正在尝试使用索引缓冲区渲染包含文件的多边形。我试着让他们喜欢:
我得到了指数的结果:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14....
如果我手动做:Indices = new short[] { 0,1,2 2,3,0 }
我看到一张脸。
如何正确获取索引数据?或者 fbx(?) 中没有索引数据
opengl - IBO 中的三倍序列如何工作?
我正在分析一个混淆的 OpenGL 应用程序。我想生成一个.obj
描述应用程序中显示的多面模型的文件。
所以我冻结了应用程序并挖掘出在 VBO 和 IBO 中设置的值。但 IBO 设定的价值观比我预想的要神秘得多。价值是
0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 5, 8, 3, 3, 9, 9, 10, 11, 12, 12, 10, 13, 14, 14, 10, 15, 16, 16, 17, 17, 7, 8, 8, 18, 18, 19, 20, 21, 21, 22, 22, 23, 24, 25, 25, 26, 26, 27, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 36, 37, 38, 38, 36, 39, 34, 34, 40, 40, 40, 41, 42, 43, 44, 44, 45, 45, 46, 47, 48, 49, 49, 50, 50, 51, 52, 52, 53, 53, 54, 55, 55, 56, 56, 57, 58, 58, 59, 59, 60, 61, 62, 62, 63, 63, 63, 64, 65, 66, 67, 64, 68, 68, 69, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 77, 78, 79, 80, 81, 82, 82, 80, 83, 83, 84, 84, 85, 86, 87, 88, 88, 89, 89, 90, 91, 91, 92, 92, 92, 93, 94, 95, 96, 96, 97, 97, 97, 98, 99, 100, 101, 102, 102, 100, 103, 103, 104, 104, 105, 106, 107, 107, 108, 108, 108, 109, 110, 111, 112, 112, 100, 100, 101, 113, 114, 114, ... (长度=10495)
如您所见,像 , 和 之类的索引增加40
了三倍,因此既不设置, , , ,也不设置为将无法正常工作。63
92
108
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUADS
GL_QUAD_STRIP
GL_POLYGON
glDrawElements
是否有某种先进的技术可以在 IBO 中使用三重排序索引?这是什么意思?它的用途是什么?
opengl - glDrawElementsBaseVertex 是如何工作的?
我有一个平面和一个索引缓冲区,或带有图像上标记的索引的 EBO:
现在,如果我打电话:
我明白了:
这个我明白。此外,如果我这样做:
这也是有道理的。但是当我更改其他参数之一时,我的理解完全崩溃了。如果我这样做:
它看起来像这样:
因此,通过将参数 3 传递给 basevertex 参数(最后一个),它开始使用索引,而不是从索引的 3 个位置开始,甚至不是从索引的 3 个三角形开始,而是从大约 6 个三角形开始,或更准确地说索引号 18。我无法理解这种行为。
此外,我已经阅读了这些函数中“索引”参数的矛盾含义:
我读过索引指针使您可以通过提供指针直接引用索引缓冲区,如果它为空,则索引缓冲区取自当前绑定的 GL_ELEMENT_ARRAY_BUFFER。然而,从一个版本的文档中它说:
indices 将字节偏移量(转换为指针类型)指定到绑定到 GL_ELEMENT_ARRAY_BUFFER 的缓冲区中以开始读取索引。
在另一个版本中它说:
indices 指定一个指向索引存储位置的指针。
如果我用倒数第二个参数(索引)作为 (void*)3 调用 glDrawElementsBaseVertex,我将第一个三角形绘制为红色。如果我指定 (void*)6 我没有突出显示三角形。如果我指定 (void*)9 我会突出显示第二个三角形。
我无法理解这一切。那么这个参数,indices,是不是一个可选的指针,指向你希望使用的索引,而不是使用当前绑定的元素数组缓冲区?
javascript - WebGL 使用索引缓冲区使用偏移量绘制球体网格时遇到问题
我正在尝试绘制一个球体网格,稍后我可以将其修改为看起来像一棵树的叶子。但是,我的 pointsArray 中也有一些顶点位于从我的球体网格生成的顶点之前。我有一个索引缓冲区,其中包含用于按顺序绘制每个三角形的索引,但我需要访问顶点的最后一部分,即我的球体网格,而不需要索引缓冲区从其他顶点绘制三角形。在这里,我为顶点、颜色和纹理坐标创建缓冲区,以将它们传输到我的着色器代码。我还为球体网格创建了一个索引缓冲区。
这是我的球体生成代码:
这是我在绘制其余顶点后尝试绘制球体的地方。
当此代码运行时,索引缓冲区从 pointsArray 的开头开始绘制,绘制整个建筑物。如何从 pointsArray 的偏移量开始仅使用球体网格的索引缓冲区
java - 使用索引缓冲区对象在 Android/Openegl 中创建 3d 环
现在我正在为 android/OpenGL 创建一个 3D 游戏,感觉是飞过用索引缓冲区对象制作的这种 3D 环,如图所示。
我的问题:实际上我的扭曲循环正在生成它应该的坐标,但是如果我翻译它就会被挤压,因为在这种情况下这会导致 Y 坐标与 z 坐标不匹配。
我尝试了几天来寻找一种方法来弥补这个问题但没有成功,你们中的任何人都可以说我在 OpenGL/android 中创建一个可翻译的 3D 环的方法,无论有没有我的基础知识都会很好地帮助我。
翻译 = 1
翻译 = 0