当前位置: 首页 > 知识库问答 >
问题:

使用几何体着色器的OpenGL几何体挤出

鞠鸿雪
2023-03-14

使用GLE管材和挤出库(http://www.linas.org/gle/)我能够使用OpenGL将2D计数挤出到3D对象中。该库在CPU上完成所有工作,并使用OpenGL即时模式

我想在GPU上使用几何着色器进行挤压可能会更快,尤其是在渲染大量几何图形时。因为我还没有在OpenGL中使用几何着色器的任何经验,我想知道这是否可能,以及我必须注意什么。您认为将这些计算转移到GPU并提高性能是个好主意吗?也应该可以从GPU将渲染的几何图形返回CPU,可能使用“渲染到VBO”。

共有1个答案

柳逸春
2023-03-14

如果几何确实改变了每一帧,你应该在图形处理器上这样做。
请记住,不依赖立即模式的其他解决方案将比您现在拥有的更快。你甚至可能不必在图形处理器上做这件事。

但是也许你想使用阴影映射来代替,这在某些情况下更有效。它还将使它有可能为阿尔法测试对象(如草)渲染阴影。但是看起来你真的需要结果的阴影几何,所以我不确定这是否适合你。

现在回到阴影卷
使用几何体着色器从网格中提取阴影轮廓是一个相当复杂的过程。但是互联网上有足够的信息。

以下是Nvidia的一篇文章,详细解释了该过程:
使用层次遮挡消隐和几何体着色器的高效而健壮的阴影体积。

还有一种方法(从2003年开始)甚至不需要几何体着色器,这在低端硬件上可能会很有趣:
http://de.slideshare.net/stefan_b/shadow-volumes-on-programmable-graphics-hardware

如果你不需要最有效的解决方案(使用阴影轮廓),你也可以简单地自己提取网格的每个三角形。这是非常容易使用几何着色器。在尝试在GPU上实现剪影提取之前,我会先尝试一下。

关于你问题中的“渲染到VBO”部分:据我所知,没有办法将几何着色器的输出读取回中央处理器。不要引用我的话,但我从未听说过这样做的方法。

 类似资料:
  • 我用C SDL2 GLEW Opengl 4.1编程一个小的体素游戏,有点像Minecraft。 我正在尽可能优化体素渲染。 我把世界滑成一块块,而这块块又滑成一块块。 每个块包含16x16x16个块。 现在,如果编辑块(删除/放置块),我将重建完整块和相邻块,并将其与vao和vbo一起上载到图形卡。 现在,为了最小化顶点数据,我必须从cpu传输到gpu,我使用几何体着色器。 首先,这是个好主意吗

  • 我正在尝试制作一个几何体着色器(使用着色器生成器)来简化模型。首先,我试图做一个体素化,但结果不好,我找不到它的错。 在下面的代码中,想法是找到输入三角形的中心,然后使其成为我要创建的框的中心。 我知道这不是世界上最优雅的代码,但先走一步,我需要让它工作...

  • 在我的第一个opengl“体素”项目中,我使用几何着色器从gl_points创建立方体,它工作得很好,但我相信它可以做得更好。在alpha颜色中,我传递关于应该渲染哪些面的信息(跳过与其他立方体相邻的面),然后使用“引用”立方体定义创建可见面的顶点。每个点乘以3个矩阵。直觉告诉我,也许整张脸可以乘以它们,而不是每一点,但是我的数学技能很差,所以请建议。 ------- 更新的代码:------

  • 从一个形状路径中,挤压出一个BufferGeometry。// iOS iframe auto-resize workaround if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) { const scene = document.getElementById( 'scene' ); scene.style.width = getCo

  • 在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader),几何着色器的输入是一个图元(如点或三角形)的一组顶点。几何着色器可以在顶点发送到下一着色器阶段之前对它们随意变换。然而,几何着色器最有趣的地方在于,它能够将(这一组)顶点变换为完全不同的图元,并且还能生成比原来更多的顶点。 废话不多说,我们直接先看一个几何着色器的例子: #version 330 core layout

  • 几何体组件为实体提供基本形状。这个 primitive属性定义常规形状。在计算机图形学中,几何基元是不可分的基本形状。通常还定义一个材质组件来创建完整的网孔(Mesh)。 目录 基础属性 每种几何图形类型都具有以下属性: 属性 描述 默认值 buffer 将几何体转换为BufferGeometry以减少内存使用,但代价是更难操作。 true primitive 几何体的名称(例如,下面列出的几何体