问题标签 [vertex-buffer-objects]
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 - 为什么打开场景图仅在启用 UseVertexBufferObject 时才渲染?
我在工作中用 OpenSceneGraph(与 Qt Gui 接口)编写了一个程序,一切都很好。现在我把程序带回家了(即我把源代码带回家并在家里编译它),我再也看不到场景了,除非我设置了setUseVertexBufferObjects(true)
让我相信场景不会渲染对象的选项不是这样设置的(即对象不只是被剔除)。这些模型在渲染时绝对是查看器相机的子代,我也不使用任何会导致剔除的节点掩码。我将至少一个物体的位置重新设置在相机的视野中,所以它不应该是平截头体剔除。
我的着色器使用#version330
,我工作的显卡是 NVidia Quadro 4000(我相信),我家里的显卡是 Radeon HD 5870,所以硬件应该不是问题。
OpenSceneGraph 安装是一个全新的安装,所以很明显我可能在这里犯了一个错误,但我不知道哪个设置会导致这种“行为”。
那么,为什么会发生这种情况?
c - OpenGL VBO 孤立实现
我目前正在研究一个精灵渲染器,它的数据每次滴答都会改变,所以我一直在寻找流式传输缓冲区对象的方法,我遇到了缓冲区孤儿......这让我有点困惑。
- 首先,当您使用 NULL 指针调用 glBufferData 时,是否分配了新内存,因此缓冲区大小是否发生变化是否重要?
- 其次,您是否需要在每次更新缓冲区时调用 glMap/glUnmap 或单个 glMap 工作?GL_INVALIDATE_BUFFER 是否与仅将数据设置为 NULL 相同?
最后,我在下面的实现中遗漏了什么吗?
每个刻度:
/li>
c++ - glTexCoordPointer 输出不符合预期
我正在尝试使用glDrawElements
,glTexCoordPointer
并glTexImage1D
创建一维纹理,渲染表面数据集并根据顶点的高度值为顶点着色。
我的纹理生成:
vArray
是一个存储用于渲染的顶点的数组。
iArray
是一个存储渲染索引的数组。
tArray
是一个存储标准化高度的数组。
我的渲染代码:
最终输出与我预期的不一样,希望有人能指出我的错误。
opengl - OpenGL VAO + 多个 VBO - 理论 - 批量渲染
我正在考虑调整我当前的批量渲染。我目前做的是用这样的命令运行一个循环:
本质上,我有 1 个 HUGE VBO,或者更像 3 个(顶点/法线/索引),我使用 1 个 VAO 将其全部绑定并渲染。当前渲染也适用于 1 材质 = 1 vao/3 VBOS(垂直/标准/索引)中的网格列表。
效果很好,但我现在想做的是创建一个向量,然后让每个 VBO 最多保持 500k 个索引。这个想法是将 1 个大缓冲区拆分为多个较小的缓冲区,这样如果用户更改材料,那么我不必重建整个大型 VBO,而只需重建较小的一个。假设有 1 亿个多边形,5 万个对象。重建可能需要一段时间......我想我测量过它,它是几秒钟。
所以问题是,给定我用来运行上面的循环以绘制对象的命令。我还能以某种方式使用它来绘制子 VBO 吗?上面的命令给出了 VBO 中每个项目的偏移/顶点起点,但是如果我在 1 个 VAO 下绑定多个 VBO,我看不到指定应该使用哪个 VBO 的方法。或者也许我应该每 1 个 VBO 列表(或包含所有 VBO 的结构)有 1 个 VAO,然后在循环中绑定每个 VBO,然后调用 draw?我只是有点担心使用 10k 绑定的 VBO 我会失去性能,并且在更换整个 VBO 时不会获得太多的加速?
希望这以某种方式......解释“问题”。
opengl-es-2.0 - 在 OpenGL ES 2 2D 中剔除屏幕外对象
我正在玩 OpenGL ES 2.0。如果我正在使用简单的 2D 投影,如果我有一个大的 2D 顶点网格,这些顶点几乎是静态的(想想地图图块),其中任何时候只有一小部分是可见的,那会更好。 ..
- 在 CPU 中计算出哪些顶点是可见的,然后创建一个 VBO 来仅绘制构成每一帧中可见图块的三角形?
或者
- 在整个平铺网格中保留一个静态 VBO,然后仅依靠显卡(在我的情况下为 RPi)来剪掉屏幕外的三角形?
或者也许是两者的某种组合(如重叠的预计算网格集)?在后一种选择变得不可行之前,网格必须有多大?
编辑 我决定多次调用 glDrawElements(),绘制我知道会与视口重叠的索引缓冲区的子范围。在我正在处理的规模上,即使在 Pi 零上,绘制整个元素数组的速度似乎也没有任何区别。
但是,如果涉及网格的任何旋转,这种方法将需要更多的计算来确定需要渲染哪些元素范围 - 有效地光栅化我自己的四边形。我很想知道这是否是一种合理的方法。
我猜还有其他一些选择,比如将飞机分解成子区域的更奇特的结构。不过,仍然不确定这是否真的有必要。
谢谢!
请注意:我不想讨论在片段着色器中绘制图块,我对使用顶点着色器的正确方法更感兴趣,而不是实际解决所描述的问题。
opengl - VBO 如何连接到 VAO
VAO 是顶点数组对象,VBO 是顶点缓冲区对象。创建和绑定/解除绑定 VAO 和 VBO 的调用具有如下一般格式:
我在互联网上关注了一些教程,他们说 VBO 绑定到 VAO,但是在上面的代码中,我不明白 VBO 和 VAO 之间的“连接”或“绑定”是如何建立的? 我的意思是我们如何知道哪个 VBO 绑定到哪个 VAO 以及如果一个 VBO 绑定到多个 VAO 怎么办?
所以,基本问题是:VBO 绑定到 VAO 是什么意思,我们如何知道哪个 VBO 绑定到哪个 VAO 以及这个绑定是如何建立的?
c++ - 无法通过glGetBufferSubData获取缓冲区对象数据
我希望使用opengl制作河内塔游戏。最终,我遇到了处理和将数据从一个缓冲区对象传输到另一个缓冲区对象的问题。我已经成功地将我的顶点存储在一个缓冲区对象中,并将它与一个顶点数组绑定。现在想将它移动到另一个创建的缓冲区对象,该对象绑定到另一个顶点数组。问题是当我尝试使用 glGetBufferSubData 获取我的顶点时,我的数据数组显示它的所有元素都为零(我将它打印在控制台上)。我仔细检查了天气,我的缓冲区对象的数据正确,看起来是这样。请帮助我,我在这里的绳索尽头。
我的代码: