Questions tagged «vbo»

3
团队如何防止覆盖源文件中的工作?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 4年前关闭。 在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖? 假设开发者一在工作,Audio.cpp而开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
26 project-management  version-control  teamwork  java  2d  collision-detection  vector  collision-resolution  unity  directx  directx11  directx10  xna  ios  monogame  windows-phone-8  xamarin  design-patterns  oop  xna  collision-detection  collision-resolution  bounding-boxes  rotation  collision-detection  mathematics  javascript  algorithm  separating-axis-theorem  xna  2d  monogame  image  xna  directx  graphics  performance  opengl  2d  3d  c++  directx11  unity  c#  scale  c#  xna  collision-detection  collision-resolution  leaderboards  scoring  glsl  srgb  tilemap  three.js  tiled  unity  physics  xml  dialog-tree  xna  c#  .net  opengl  lwjgl  vbo  physics  graphics  procedural-generation  simulations  water  opengl  java  textures  lwjgl  frame-buffer  unity  unity  2d  collision-detection  collision-resolution  trigonometry  java  android  libgdx  xna  c#  frame-rate  c++  unreal-4  procedural-generation  java  graphics  lwjgl  slick  c++  software-engineering 

3
为什么OpenGL> = 3只允许VBO?
我看到OpenGL版本3和更高版本取消了客户端渲染的使用。立即模式已被消除,并且顶点数组似乎已被弃用。相反,如果我理解正确,则VBO是渲染顶点的主要方法。 虽然我看到采用统一的方式呈现所有内容的逻辑,但VBO是否在顶点阵列方面没有重大缺点?我以为VBO通常应该是包含大于1MB数据的大缓冲区。如果我的场景具有许多较小的几何形状怎么办?我有一个场景图,其中包含大量节点,每个节点都需要自己的变换,等等。每个节点也应该能够分别删除,单独添加,等等。我以前使用的是顶点数组。因此,我的第一个问题是,如果我切换到VBO,现在是否需要为每个场景分配一个VBO,这会给我的场景图对象带来更大的开销。 另一个问题是我渲染的几何图形可能是高度动态的。在最坏的情况下,有时可能需要在一段时间内每帧重新发送所有几何图形。在这种用例中,VBO的性能是否会比顶点阵列差,或者最差的VBO的工作量与顶点阵列一样多,但没有更多? 因此,以更简洁的格式,我的问题是: 1)分配/取消分配VBO是否有相当大的开销(我的意思是仅仅建立一个缓冲区)? 2)如果我要每帧更新CPU的数据,这是否会比使用顶点数组的情况差很多? 最后,我想知道: 3)如果对以上两个问题的回答均为“是”,为什么不赞成使用其他渲染模式,而不是VBO?我在这里缺少什么,比如我应该用来减轻这些潜在分配成本等的技术吗? 4)根据我使用的OpenGL版本,这些问题的答案是否会发生实质性变化?如果我通过使用高性能的VBO将代码重构为OpenGL 3或4向前兼容,那么相同的技术可能会在OpenGL 2中很好地发挥作用,或者某些技术在OpenGL 3中可能会快得多+和其他使用OpenGL 2的软件? 我在堆栈溢出时问了这个问题,但是我在这里重新发布,因为我意识到这个站点可能更适合我的问题。

2
OpenGL:VBO或glBegin()+ glEnd()?
最近,我将原始OGL红皮书的读者链接到了教程站点。向下的第三个标头明确表示忘记了glBegin()和glEnd()作为典型的渲染方法。我是通过Redbook的方法学习的,但我发现VBO有一些好处。这真的是可行的方法吗?如果是,是否有一种方法可以轻松地将渲染代码和后续的着色器转换为VBO和后续的数据类型?
16 opengl  graphics  glsl  vbo 

2
要学习和/或使用哪些OpenGL版本?
因此,我是OpenGL的新手...我具有游戏编程的一般知识,但几乎没有实践经验。 我一直在研究各种文章和书籍,并尝试深入研究OpenGL,但是我发现各种版本以及旧的与新的处理方式令人困惑。 我想我的第一个问题是,是否有人知道可以运行每个版本OpenGL的游戏玩家所占的百分比。市场份额如何?2.x,3.x,4.x ... 我了解了Half Life 2的要求,因为我知道Valve用OpenGL将其更新为可以在Mac上运行,并且我知道他们通常会吸引非常广泛的用户群,并且他们说至少要有GeForce 8系列。我在Nvidia网站上查看了8800 GT,其中列出了对OpenGL 2.1的支持。也许我是错的,对我来说听起来很古老,因为已经有了4.x版本。我查了一下8800GT的驱动程序,它说它支持4.2!有点不一样,大声笑。 我还读过类似的文章,例如XP仅支持特定版本,或者OS X仅支持3.2或其他各种东西。总体而言,我只是对各种版本有多少支持以及要学习/使用哪个版本感到困惑。 我也在寻找学习资源。到目前为止,我的搜索结果使我指向了OpenGL SuperBible。第4版在Amazon上获得了好评,但它教授2.1。第五版讲授3.3版本,并且在评论中有几点提到第四版更好,而第五版没有正确地讲授新功能或其他内容?基本上,即使在学习材料中,我也看到差异,我什至不知道从哪里开始。 据我了解,3.x开始了一种全新的工作方式,我读过各种文章和评论,它们都希望“远离已弃用的功能,例如glBegin(),glEnd()”,但还有很多书我见过的教程都使用该方法。我见过一些人在说,基本上,新的做事方式比较复杂,而旧的做事方式不好。 就个人而言,我只是想补充一点,但我对镶嵌技术很感兴趣。所以我想这也是其中的原因,因为据我了解,这仅在4.x中? [顺便说一句,我的桌面支持4.2]

2
OpenGL:是否可以在不指定VBO的情况下使用VAO
在我可以找到的有关VAO(顶点数组对象)的所有教程中,它们都展示了如何通过配置顶点属性和绑定VBO(顶点缓冲区对象)来使用它们。但是我想创建一个VAO,该VAO将与一组固定着色器一起为一组VBO配置,其中每个缓冲区使用相同的数据模式(顶点,uv,颜色等)。因此,我想为将使用一个着色器绘制的多个VBO创建一个VAO。 我在此上找不到任何演示,所以我决定尝试一下。但它不起作用,并在glDrawArray通话中崩溃。似乎VBO没有绑定。这是我正在使用的代码: 渲染: /* Prepare vertex attributes */ glBindVertexArrayOES(vao); /* Upload the buffer to the GPU */ glBindBuffer(GL_ARRAY_BUFFER, pool->next()); glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer()); /* Draw the triangles */ glDrawArrays(GL_TRIANGLES, 0, parts * 6); glBindVertexArrayOES(0); VAO创作: glBindVertexArrayOES(vao); glEnableVertexAttribArray(ls.position); glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0); glEnableVertexAttribArray(ls.color); glVertexAttribPointer(ls.color, 3, …
12 opengl  vbo  vao 

1
如何使用多线程OpenGL应用程序更新VBO并同时使用它们?
我有一个简单的应用程序。它有两个线程,每个线程都有自己的呈现上下文,但是它们共享一个VBO(这是有效的,我已经对其进行了测试)。 现在我想要的是:一个线程正在从VBO的上半部分渲染一些数据,第二个线程正在更新VBO的第二部分。 当我不更新VBO时,它工作正常。 但是更新时我遇到了一些奇怪的问题。当我glMapBuffer用来更新VBO(在第二个线程中)时,在大多数情况下,在第一个线程中,它什么都不呈现-整个屏幕清晰(glClear调用后)。看起来它无法触摸来自VBO的数据(这是可以理解的,因为整个缓冲区已映射,因此可以某种方式锁定)。 我尝试使用glMapBufferRange,它使用GL_MAP_UNSYNCHRONIZED_BIT。这意味着,“不要等待并根据需要使用VBO,我(程序)将自己同步它”。另外,当我映射一系列VBO并从另一部分渲染数据时,它不应该等待,但是遇到的问题与相同glMapBuffer。 谁能帮我解决这个问题或解释为什么会发生吗?


2
2D游戏和现代OpenGL
前概念 好的,到目前为止,我收集的是: 不要使用固定的管道(已弃用或将要弃用) vbos存储“对象模型”(主要是n个顶点数据) vaos描述了如何放置数据,以便绘图调用知道每个vbo的哪一部分是关于哪种顶点信息的(一个vao可以引用多个vbo,相反则有点困难) 每个绘制调用还将顶点数据发送到着色器 我如何看待3D(可选) 有了这些信息,我可以看到使用现代OpenGL绘制3D复杂对象的效果如何。您基本上是将一堆对象模型(可能来自Blender或其他类似软件)加载到具有局部坐标的VBO中,然后只需为对象的每个实例提供不同的着色器参数(偏移量)即可绘制到世界空间。 问题/问题 但是,在2D中,问题和优先级完全不同。您不需要绘制很多复杂的对象,也不需要复杂的投影矩阵,并且着色器和着色器要简单得多。 用现代OpenGL频繁(实际上经常,基本上每帧)绘制变化的几何形状的最佳方法是什么? 在下面的段落中,您可以看到一些问题的想法(圆形和矩形问题),可以更好地识别我感兴趣的更改类型。 我的尝试(可选) 因此,我开始考虑如何处理在屏幕上绘制基本的2D几何: 正方形:[(1, 0), (1, 1), (0, 1), (0, 0)]在局部空间中为正方形的几何图形加载VBO,然后为着色器提供正方形的实际宽度以及世界坐标和颜色信息 冷却,看起来很容易。让我们转到一个圆圈: 一个圆圈:三角形风扇。精度(顶点数)多少?对于小圆圈,精度必须较低,对于错误环,精度必须较高。显然,加载1个VBO可能无法满足所有情况。如果由于圆的大小被调整为更大而需要增加精度怎么办? 不太酷。让我们移动到稍微容易一点的矩形: 矩形:嗯。没有“常规矩形几何体”。您只需要一个宽度/高度比例即可,但是,如果尺寸改变,每个矩形可能会有所不同。 如您所见,事情从那里走下坡路。特别是对于复杂的多边形等等。 无代码政策:P 我只需要一个大概的想法,不需要任何代码,尤其是C或C ++代码。就像这样说:“使用此顶点数据创建一个VBO,然后将其绑定,...”。
10 opengl  2d  vbo  vao 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.