问题标签 [culling]
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.
three.js - Three.js - 立方体和球体与平面奇怪地剪裁
我遇到了一个问题,它看起来像立方体和球体与平面剪裁。当我将立方体(使用键盘)移向场景后面时,似乎会发生这种情况。当我使用轨迹球控件在场景中移动时也会发生这种情况。有时即使我转动相机也可以看到立方体和球体,所以我正在看飞机的底部。
一些可能有用的代码包含相机变量、平面、球体和立方体的创建。我也有图片:http: //imgur.com/0VlZLmP
matrix - 使用视图矩阵进行截锥剔除
在 GLSL 着色器中,我需要省略一些曲面细分补丁以显着提高性能。这些补丁是三角形,每个顶点都有给定的世界坐标。但是,当我将这些坐标转换为视锥体剔除的视图空间时,存在误差。
这是原始地形。
这就是错误在顶部影响它的方式。
这是一个有污垢的部分的特写镜头。
这些错误不仅发生在屏幕顶部,还发生在侧面和底部。这是我用来确定是否应该排除三角形的代码(在 GLSL 中)。
我将不胜感激任何帮助!贝希米斯
opengl - 基于平铺剔除概念问题的延迟渲染
编辑:我仍在寻找有关使用 OpenCL 或计算着色器的帮助。我宁愿继续使用 OGL 3.3 而不必处理对 OGL 4.3 和 OpenCL 1.2 的不良驱动程序支持,但无论如何我都想不出在不使用两者之一的情况下进行这种类型的着色(匹配灯光和瓷砖)。是否可以在不使用 GPGPU 的情况下实现基于切片的剔除?
我在 OpenGL 3.3 中编写了一个延迟渲染。现在我不对灯光通道进行任何剔除(我只是为每个灯光渲染一个全屏四边形)。这(显然)有大量透支。(有时约为 100%)。正因为如此,我一直在寻找在光通过期间提高性能的方法。似乎(几乎)每个人都认为最好的方法是使用屏幕空间图块来剔除场景。这是 Frostbite 2 中使用的方法。我在 SIGGRAPH 2010 期间阅读了 Andrew Lauritzen 的演示文稿(http://download-software.intel.com/sites/default/files/m/d/4/1/d/8 /lauritzen_deferred_shading_siggraph_2010.pdf),我不确定我是否完全理解这个概念。(就此而言,为什么它比其他任何东西都好,如果它对我更好)
在演示文稿中,Laurtizen 使用光量、四边形和瓷砖来筛选场景,介绍了延迟着色。根据他的数据,基于图块的延迟渲染器是最快的(到目前为止)。我不明白为什么会这样。我猜这与每个瓷砖的所有灯光都集中在一起这一事实有关。在演示文稿中,它说读取 G-Buffer 一次然后计算光照,但这对我来说没有意义。在我看来,我会这样实现:
这仍然需要对 G-Buffer 进行大量采样。我认为这样做与为每个灯光渲染屏幕对齐的四边形具有相同(如果不是更差)的性能。不过,从它的措辞来看,似乎是这样的:
但我看不出如何在不超过某些 GPU 上片段着色器的指令限制的情况下做到这一点。谁能帮我这个?似乎几乎每个基于 tile 的延迟渲染器都使用计算着色器或 OpenCL(批处理灯光),为什么会这样,如果我不使用这些会发生什么?
actionscript-3 - 如何在旋转的瓦片地图中查找屏幕边界瓦片索引?
通常,Axis-aligned (rotation = 0) tilemap 很容易遍历屏幕上的可见图块。
但是当整个瓦片地图旋转时,你如何“剔除”或过滤瓦片索引?
注意:这是为了改进 ActionScript 3.0(在Genome2D中)中的平铺渲染类,但其他计算机语言的答案也同样适用!:)
hidden - 遮挡剔除测试 3d
假设我们有一个身体,其外壳由平面三角形(多边形网格)表示。网格由数百万个多边形组成,以达到所需的精度水平。此外,身体不是凸面的(它不是球体,请查看 wiki 页面“多边形网格”,了解身体的一个很好的例子——海豚)。
对于某个应用程序,我想知道从某个点可以看到哪些多边形。我想强调测试是否可以看到三角形的中心点,因此,一个三角形可能被看到(如果我们看到它的中心点)或被隐藏,我对半看到的多边形不感兴趣。
你能推荐我这样做的好方法吗,我希望将有关多边形可见性的数据作为输出到内存(编程变量 - 所以我将能够进一步使用数据)而不是屏幕
opengl - 渲染中最先进的剔除和批处理技术
我目前正在升级和重组 OpenGL 渲染引擎。该引擎用于可视化建筑数据的大型场景(带有内部的建筑物),并且对象的数量会变得相当大。与任何建筑物一样,墙壁内有很多被遮挡的物体,您自然只能看到与您在同一房间内的物体,或者如果您在外面,则只能看到外部。这留下了大量应该通过遮挡剔除和截锥剔除来遮挡的对象。
同时有很多重复的几何体可以在渲染批处理中进行批处理,也有很多对象可以通过实例渲染进行渲染。
在我看来,很难以最佳方式结合渲染批处理和剔除。如果在同一个 VBO 中批处理太多对象,则很难在 CPU 上剔除对象以跳过渲染该批处理。同时如果你跳过cpu上的剔除,很多物体会在不可见的情况下被GPU处理。如果您完全跳过批处理以便更轻松地剔除 CPU,则会出现大量不必要的渲染调用。
我已经对现有技术和理论进行了一些研究,以了解如何在现代图形中解决这些问题,但我一直无法找到任何具体的解决方案。一个同事和我想出的一个想法是将批次限制在彼此相对靠近的物体上,例如房间内的所有椅子或 n 个会面半径内的所有椅子。这可以通过使用八叉树来简化和优化。
有没有人对最先进的现代图形引擎中用于场景管理、剔除、批处理等技术的任何指示?
c++ - DirectX 11 正面方向
创建光栅器时,我将光栅器描述设置为:
这工作正常。但是当我更改FrontCounterClockwise
为false
. 什么都没有渲染(我猜一切都被剔除)。我是否误解了 的目的FrontCounterClockwise
?因为我期待,它将顺时针的面作为正面,而不是逆时针的面。我究竟做错了什么?
编辑:这是完整的初始化代码:
c++ - C/C++ OpenGL 遮挡剔除
我正在尝试原始的 OpenGL,所以我决定编写基于 3d 块的非常非常简单的游戏,类似于 Minecraft 游戏,只是为了提高我的技能。
我遇到的最后一个问题是剔除。我终于想出了如何制作 Frustum Culling 和 Backface Culling,它们都工作得很好,但不幸的是我不知道如何编写 Occlusion Culling 以不显示被更接近玩家的其他框覆盖的框。
只是为了在主绘制循环中进行测试,我正在遍历所有框,稍后我会将其更改为更有效的方式,现在代码如下所示:
和 Cube::Draw:
我很确定它效率低下,正如我之前所说,这段代码很快就会被优化。现在我正在努力让它发挥作用。bool 变量 showSide 用于检测,如果旁边有其他框,则不会绘制它们之间的边。
我一直在寻找和搜索如何进行遮挡剔除,但我失败了,只有简洁的信息或理论。
我的问题是,任何人都可以帮助我如何不绘制覆盖块?我听说有我编译和注入的 GLEW,它有以下两行:glBeginQuery(GL_SAMPLES_PASSED_ARB, query); glEndQuery(GL_SAMPLES_PASSED);
显然 Query 有助于解决我的问题,但是我在很多方面都没有成功地尝试在 Google 上使用它,首先没有绘制立方体,其次像之前一样绘制了游戏,也覆盖了立方体。
opengl - 早期模板剔除
根据模板测试,我正试图让早期片段剔除工作。我的场景如下:我有一个片段着色器,它做了很多工作,但在渲染场景时只需要在很少的片段上运行。这些片段几乎可以位于屏幕上的任何位置(我无法使用剪刀快速过滤掉这些片段)。
在渲染通道 1 中,我生成了一个具有两个可能值的模板缓冲区。通过 2 的值将具有以下含义:
- 0:什么都不做
- 1:可以继续,(例如,进入片段着色器,并渲染)
Pass 2 正确地渲染了场景。模板缓冲区是这样配置的:
现在我运行我的应用程序。所选像素的颜色会根据模板值进行更改,这意味着模板测试工作正常。
然而,我应该会看到早期模板剔除带来的巨大而惊人的性能提升......但没有任何反应。我的猜测是模板测试要么发生在深度测试之后,要么甚至在片段着色器被调用之后。为什么?
nVidia 显然拥有一项关于早期模板剔除的专利: http ://www.freepatentsonline.com/7184040.html 这是立即启用它吗?
我使用的是 nVidia GeForce GTS 450 显卡。早期的模板剔除应该与这张卡一起使用吗?使用最新驱动程序运行 Windows 7。