问题标签 [geometry-instancing]
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 - OpenGL草渲染
我一直在研究渲染草的不同技术。我决定主要使用几何着色器生成的草,这样当我将它们渲染为 GL_POINTS 时,我可以动态生成三角形风扇,但我没有看到我想看到的性能。使用 100,000 片草叶,我可能会获得 20-50 fps,而且我有一个不错的 GPU。我想知道我的方法是否错误,或者我是否达到了 GPU 的限制,或者我做错了什么,或者他们是否是一种更快的方法(我的目标是单个刀片,我可以在其中理想地操纵顶点) . 我使用的纹理 256x256
我的渲染步骤是:
创建 VAO 和 VBO 并存储位置和绑定一次:
然后我渲染:
然后是我的顶点着色器:
我确实删除了顶点着色器,只留下了 GL_POSITION,但仍然不是问题。我的几何着色器:
和我的片段着色器:(这是在延迟引擎中,我也尝试过前向渲染,但我认为这里不会影响性能)
c# - Silverlight 5.0 中的几何实例化 - 可能吗?
我正在开发 Silverlight 5.0 应用程序。因为我一次渲染了很多模型(数百个),所以我想使用几何实例化。不幸的是,从我的研究中我发现 silverlight 使用着色器模型 2.0。那么是否可以执行实例化?在 xna 4.0 中有方法
GraphicsDevice.DrawInstancedPrimitives()
虽然我在 Silverlight 中看不到它。是否可以在 Silverlight 中使用硬件实例化?
如果没有 - 是否有一些替代方法可以提高我的应用程序的性能?问题是,我正在打电话graphicsDevice.SetPixelShader()
,而且我的方法graphicsDevice.SetVertexShader()
有几千次。Draw()
c++ - 使用 OpenGL 3.3 进行实例化似乎很慢
我用 C++ 编写了一个最小的代码示例,它在屏幕上呈现 10000 个彩色四边形。我正在使用“实例化”,因此每帧只更新每个四边形的模型矩阵。6 个顶点的数据存储在一个单独的 VBO 中,并且将一直重复使用。投影矩阵(正交)在程序启动时通过统一注入一次。模型矩阵是在 CPU 上使用库 GLM 计算的。我测量了渲染时间,平均 FPS 仅为 52。我认为这要少得多,但我在我的小示例程序中找不到错误/瓶颈。
经过一些分析,使用 GLM 完成的 3 次计算似乎非常缓慢。我在这里做错了吗?例如,如果我删除旋转计算,我会获得 10 FPS 的 FPS 提升!也许您可以帮助我找出我可以在这里做得更好的地方以及如何优化我的样本。对我来说很重要的是,每个四边形在运行时都是可以单独配置的,所以我决定使用实例化。将矩阵计算移至 GPU 似乎是另一种选择,但我真的很困惑,为什么 CPU 在计算 10000 个模型矩阵时有这么多问题!好吧,我的 CPU 很差(Athlon 2 Core-Duo M300,GPU 是 ATI Mobility Radeon 4100),但它应该在无法测量的时间内完成这项任务,或者?
这是最小的、完全工作的、可编译的例子(如果你有 GLFW 和 GLM)。也许有人有时间可以在这里帮助我:)
java - drawElementsInstanced 与 OpenGL 和 Java
我正在尝试使用 . 在不同位置渲染一个三角形 100 次glDrawElementsInstanced()
。
我没有得到正确的方法。我尝试了不同的教程,但它们都适用于 c++ 而不是 java。最后一个是这个。
这是我的示例代码:
这是我的顶点着色器:
目前我渲染一个正方形,中心在 0,0,0。
three.js - 三.InstancedBufferGeometry 和阴影
我正在玩实例并且很棒。
现在我试图让每个实例都投射阴影,但没有运气。我制作了 Lambert 材料的克隆,添加了位置、比例等的实例处理并且正在工作,但这只会投射一个阴影:位置 (0,0,0) 的原始几何体中的阴影(即使没有实例在那个位置)。
有人可以指出我在哪里寻找使它起作用还是这是实例或材料的限制?
谢谢。
three.js - 在 Three.JS 中实例化
可能是我,因为我对 Three.js 不是很有经验,但是 Three.js 实例化的例子似乎很模糊。
我认为 BufferGeometries 是从新 Three.js 中的 Geometries 自动创建的,我不明白为什么要在示例中添加着色器。
文档没有说明实例化。在 Three.js 文档中搜索“inst”已经给出 0 个结果。
有人能给我一个简单的例子吗?
opengl - 重用 VBO 进行硬件实例化
通常我会尝试将特定于网格的信息(VBO/VAO)与特定于实例的信息(变换、制服等)分开。
通过这种方式,操作实例信息的部分代码不需要知道任何关于 VBO/VAO 的信息,反之亦然。
然而,最近我开始使用 glDrawInstanced 使用硬件实例化,而实例属性在 VAO 中绑定在一起的事实使我的关注点分离变得更加困难。
原因是通常 VBO/VAO 是从我的 .OBJ 加载器(它具有构建它所需的所有信息)构建的,然后代码的其他部分只担心着色器制服。现在,代码的这些部分需要了解 VAO 的结构,以便附加有关其实例属性的信息。
当我有可用于正常渲染和实例化渲染的 VBO 时,这变得更加烦人。
是否有推荐的方法可以在设置网格属性和实例属性之间保持关注点的分离?
我想有两个 VAO,一个用于普通渲染,另一个用于实例渲染,我将添加我需要的额外实例属性,但我发现无法复制或检查原始 VAO 数据,所以似乎我的组件需要知道VBO/VAO 的实际结构,而不仅仅是实例参数。
c++ - 无法在 OpenGL 中的多个位置实例化 VAO
我在 OpenGL 中创建了一个 VAO,由一个 VBO(2 个三角形)、一个索引数组和一个位置数组组成。但是实例化它只显示 1 个项目。这是否意味着它在 0,0,0 处看到所有位置?
为了显示实例化的 VAO,我使用:
我是不是忘记了什么?
model - 在 HLSL 中旋转实例模型后检索正常
我开始使用“实例化模型”技术来绘制场景,但法线的顶点有问题
我给 HLSL 矩阵(旋转/缩放/位置)以绘制模型的每个实例,但旋转它们后我无法获得良好的法线。
在 MATRIX apply 之后,我的模型的 3D 计算工作正常,但是根据正常方向,光线真的很奇怪。
您是否应该建议我在旋转后恢复正常的正确方法?
谢谢
克里斯
c++ - OpenGL 实例化:如何调试丢失的每个实例数据
我对实例绘图和每个实例数据比较熟悉:我过去成功地实现了这一点。
现在我正在重构一些旧代码,并且我引入了一个关于如何将每个实例数据提供给着色器的错误。相关位如下:
- 我有一个使用glMultiDrawElementsIndirect实现的工作渲染循环:如果我忽略每个实例数据,一切都会按预期绘制。
我有一个 vbo 存储我的对象的世界变换。我使用 AMD 的CodeXL进行调试:缓冲区正确填充了数据,并且在绘制框架时被绑定。
glBindBuffer(GL_ARRAY_BUFFER,batch.mTransformBuffer); glBufferData(GL_ARRAY_BUFFER, sizeof(glm::mat4) * OBJ_NUM, &xforms, GL_DYNAMIC_DRAW);
着色器明确指定输入位置:
/li>
矩阵对于所有实例都是相等的ViewProj
,并且使用以下方法正确设置:
Model
每个实例的世界矩阵是错误的:包含全零。
在绑定缓冲区和绘制每一帧之前,我试图设置属性指针和除数,使每个绘制的实例都会收到不同的变换:
现在,我已经查看了一段时间的代码,我真的无法弄清楚我错过了什么。CodeXL 清楚地显示模型(位置 10)未正确填充。不会产生 OpenGL 错误。
我的问题是:有谁知道在哪种情况下每个实例数据的设置可能会静默失败?或有关如何进一步调试此问题的任何建议?