问题标签 [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.

0 投票
1 回答
449 浏览

opengl-es - OpenGL:大场景和小值的线抖动

我目前正在绘制 3D 太阳系,并且正在尝试绘制行星轨道的路径。计算出的数据在 3D 空间中是正确的,但是当我前往冥王星时,轨道线会到处晃动,直到相机完全停止。我不认为这对这个特定的星球来说是独一无二的,但考虑到相机必须行进的距离,我认为它在这个范围内更明显。

我怀疑它与截锥体有关,但我一直在将值插入每个组件中,但似乎找不到解决方案。要查看任何东西,我必须对行星和附近的轨道点使用非常小的数字(E-5 等),但对于其他区域,我必须使用非常小的数字(E-5 等)(也许我需要用不同的平截头体画两次?)

非常感谢任何帮助...

0 投票
2 回答
2189 浏览

3d - 当边界框真的很大时截锥体剔除

看

当边界框的所有 8 个顶点都在截锥体之外时,它不会被渲染。但是,如果某事发生如上所示。该对象应该在显示列表中。任何的想法?

0 投票
1 回答
161 浏览

graphics - 在 2d 图形中,渲染到目标然后渲染到屏幕的性能开销是多少?

我正在制作一个分屏游戏。当我渲染每个分屏时,屏幕边界之外有一些重叠。

屏幕会说 10x10 瓷砖大。如果向右移动半个图块,假设分屏视图居中,现在屏幕上显示的左右边缘有半个图块。

但是,我无法渲染半个图块,因此会渲染整个图块。我必须渲染一个额外的瓷砖(我实际上渲染了 12 以使其更容易),以便在您移动时,边缘没有黑色间隙。

如果分屏是屏幕的全尺寸,则此重叠不是问题。但是,如果您并排渲染两个分屏,如果有任何位超出线外,则最后绘制的那个将与另一个重叠,例如可见半图块的另一半。

我认为解决方案是将每个分屏渲染为纹理,并将纹理绘制到屏幕上,裁剪掉与边界重叠的位。

我想不出为什么会有很多与此相关的性能开销,因为它将一个纹理渲染到屏幕上而没有效果转换。但我想知道我是否弄错了,也许这会大大减慢游戏速度。

有没有更好的解决方案,或者这个应该没问题?

0 投票
1 回答
741 浏览

c# - XNA - 剔除性能问题

这种绘制我的瓷砖的方法似乎很慢,我不确定到底出了什么问题,它相信我的剔除方法不起作用并且在屏幕外绘制东西,但我不完全确定。这里是:

GetTileSetTypes 是一个函数,用于获取它周围的瓦片,用于不同的纹理,如 DirtBlock_North、DirtBlock_Center 等。

平铺内容只是我的块纹理的一个类。

0 投票
1 回答
1449 浏览

opengl - 使用 VBO 在 OpenGL 中进行简单的 2D 剔除

出于性能原因,我正在考虑使用 VBO 而不是立即模式。我正在创建一个充满精灵的 2D 正交场景。我不想绘制屏幕外的精灵。我通过根据屏幕尺寸和相机位置检查它们的位置来做到这一点。

在即时模式下,这很简单;每个精灵都有绘制方法。使用 VBO 这似乎很重要;我一次渲染 VBO 的整个部分。我(我能想到的)没有办法选择不在屏幕外的渲染精灵。

0 投票
1 回答
1428 浏览

html5-canvas - 使用表面法线的正交 3D 背面剔除

我正在创建一个 HTML5 画布 3D 渲染器,我想说没有 SO 的帮助我已经走了很远,但我遇到了各种各样的阻碍。我正在尝试借助一些法线计算在立方体上实现背面剔除。此外,我已将其标记为 WebGL,因为这是一个足够普遍的问题,它既适用于我的用例,也适用于 3D 加速的用例。

无论如何,当我旋转立方体时,我发现隐藏了错误的面孔。例子:

立方体的背面剔除问题

我正在使用以下顶点: https ://developer.mozilla.org/en/WebGL/Creating_3D_objects_using_WebGL#Define_the_positions_of_the_cube%27s_vertices

我使用的一般程序是:

  1. 创建一个变换矩阵,用来变换立方体的顶点

  2. 对于每个面,以及每个面上的每个点,我将它们转换为 vec3,然后将它们乘以在步骤 1 中生成的矩阵。

  3. 然后我使用 Newell 的方法获得面部的表面法线,然后从该法线和一些组成的 vec3 中获得点积,例如 [-1, 1, 1],因为我想不出一个好的值放在这里。我见过一些人为此使用相机的位置,但是......

  4. 跳过使用相机矩阵的通常步骤,我从结果向量中提取 x 和 y 值以发送到我的线和面渲染器,但前提是它们的点积大于 0。我意识到我是相当随意的拉,真的。

我想知道两件事;如果我在步骤 3 中的程序是正确的(很可能不是),并且我在脸上绘制的点的顺序不正确(很可能)。如果后者是真的,我不太确定如何可视化问题。我见过人们说法线无关紧要,它是画线的方向,但是……我很难理解这一点,或者这是否是我问题的根源。

可能没关系,但我使用的矩阵库是gl-matrix:

https://github.com/toji/gl-matrix

此外,我正在使用的开源代码库中的特定文件在这里:

http://code.google.com/p/nanoblok/source/browse/nb11/app/render.js

提前致谢!

0 投票
1 回答
1949 浏览

view - 3D 视图截锥体剔除,光线投射

我需要更多关于视锥体剔除的理论,以更好地理解如何实现它。我知道光线投射是为了弄清楚前面有什么物体,从而找出不渲染的物体。

我担心 CPU 使用率。据我了解,我应该按相机的宽度*高度投射光线,并且可能会根据相机看到的距离增加光线的数量。此外,我必须将其乘以场景中的对象数量,以验证哪个最接近光线。

我对这个概念的理解准确吗?我究竟怎样才能更有效地做到这一点?

编辑:

目标是实现某种类型的体素引擎,其中世界可以使用八叉树进行细分。它可能由数十万个立方体组成。

0 投票
1 回答
1962 浏览

unity3d - Unity Frustum 剔除问题

我正在创建一个利用偏心投影的游戏。我已经将我的游戏设置在一个集群中渲染的 CAVE 中,超过 8 台 PC,其中每只眼睛使用 4 台 PC(这会产生立体效果)。为了帮助在 CAVE 中对齐,我实现了一个偏离中心的投影类。

这个类只是告诉相机它的左上角、左下角和右下角是什么。从这里,它会创建一个新的投影矩阵,向玩家展示他们世界的左侧和右侧。然而,在 Unity 的编辑器中,摄像机仍然是面向前方的,因此 Unity 内部的剔除并没有渲染出现在左右屏幕上的一半图像。

有谁知道在 Unity 中关闭剔除或找到解决投影矩阵问题的方法?

0 投票
2 回答
8482 浏览

math - 提取视锥平面(Gribb & Hartmann 方法)

一段时间以来,我一直在努力使用Gribb/Hartmann 方法提取平截头体平面,但收效甚微。我想建立一个相机视锥来剔除我的场景。

我正在使用右手坐标系中的列主矩阵。(OpenGL 风格 - 我使用 C# 和 Playstation Mobile,但数学应该相同)

我想在世界空间中获得我的飞机,所以我从 View-Projection Matrix(即 projectionMatrix * viewMatrix)构建我的平截头体。视图矩阵是相机世界变换的逆矩阵。

问题是; 无论我调整什么,我似乎都无法得到正确的截锥体。我认为我可能遗漏了一些明显的东西。

如果我在向下看 z 轴的同时向左或向右“扫射”我的相机,我的平面的法线会发生变化,因此它们总是指向场景的原点——这让我认为它们不在世界空间中...

0 投票
1 回答
454 浏览

directx - D3DX9 自定义网格在渲染过程中与自身重叠

我有自定义模型文件格式,我正在从中读取以在 DX 中创建模型。我用

创建网格,然后依次锁定、填充、解锁索引缓冲区、顶点缓冲区和属性缓冲区。

我的问题是模型与自身重叠:

http://imageshack.us/a/img210/2732/20121018181019896.png

我启用了逆时针背面剔除:

我也启用了 z-buffer,但我很确定这只是在两个网格之间,而不是在一个网格和它本身之间。

我花了最后一天半的时间尝试谷歌寻求解决方案,但我找不到任何东西。任何帮助或帮助链接将不胜感激。