问题标签 [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 回答
957 浏览

opengl - OpenGL 实例化渲染 - 截锥体剔除

我正在使用 glDrawElementsInstanced() 绘制大量立方体(100 000+)。由于性能原因,我想实现截锥体剔除,但是当我使用实例化时我不太确定如何做到这一点。据我所知,访问单个对象实例的唯一方法是在着色器中,所以我认为我必须在那里进行剔除。我不太确定该怎么做。谁能指点我任何教程?

0 投票
0 回答
1021 浏览

opengl - 不正确的反向背面剔除?

我一直在尝试实施延迟渲染 2 周。但是我的测试程序中的所有网格都被反向剔除。上面的代码应该是渲染模型的正确方法。我看的每个例子都像这样绘制对象。但这是我使用 GL_BACK 作为剔除面时的结果:

GL_BACK

这是 GL_FRONT:

在此处输入图像描述

GL_FRONT 应该是我期望从 GL_BACK 得到的结果。奇怪的是,当我将 glFrontFace 设置为 GL_CW 时,一切都消失了。所以这个问题与缠绕无关。我整天都在搜索这方面的信息。我唯一发现的是关于深度缓冲区的东西。但我在创作中看不到任何问题。正是因为这个问题,我无法正确地为聚光灯渲染进行模板传递。我在几何通道中启用了 GL_DEPTH_TEST。这就是我作为深度缓冲区附加到我的 fbo 的内容

主要问题是,会导致反向背面剔除的可能性是什么?

0 投票
1 回答
137 浏览

irrlicht - 如果一个顶点在屏幕外,整个三角形都会被剔除

这是一个愚蠢的 Irrlicht 问题,因为我刚开始使用它,但我的问题是:我正在渲染的网格的所有三角形,即使有一个顶点超出屏幕,也会被完全剔除。这导致部分超出屏幕的网格部分完全不可见。

这是一张图片来说明问题:

在此处输入图像描述

有任何想法吗?(我的相机是 FPS 相机)。

谢谢!

0 投票
0 回答
529 浏览

c++ - 我是否正确计算了我的截锥体的属性?

我有一个基本的相机类,其中有以下值得注意的功能:

其中 paramsznzfinSetLens函数分别对应近剪裁平面距离和远剪裁平面距离。

SetLens基本上创建一个透视投影矩阵,同时计算远近剪辑平面的高度:

所以,GetFarWindowHeight()自然而然GetNearWindowHeight()地返回它们各自的身高类成员值。然而,它们的宽度对应物返回各自的高度值乘以视图纵横比。所以,对于GetNearWindowWidth()

WhereGetFarWindowWidth()执行相同的计算,当然替换mNearWindowHeightmFarWindowHeight.

现在这一切都已经解决了,有些事情告诉我,我正在不正确地计算近端和远端剪辑平面的高度和宽度。特别是,我认为导致这种混乱的原因是我在 y 轴上以度数指定视场,然后在切线函数中将其转换为弧度。认为这是导致问题的地方在于我的截锥体剔除功能,它使用近平面和远平面的宽度/高度来获取顶部、右侧、左侧和底部平面的点。

那么,我这样做完全错了吗?如果是这样,我应该怎么做才能修复它?

免责声明

这段代码最初源于一本 D3D11 书,我决定放弃阅读并回到 OpenGL。为了让这个过程不那么痛苦,我认为将一些原始代码转换为更符合 OpenGL 会很好。到目前为止,它工作得相当好,这个小问题......

编辑

我本来应该提到几件事:

  • 这不是我第一次使用 OpenGL。我非常了解转换过程,以及 GL 和 D3D 之间的坐标系差异。

  • 这不是我的整个相机类,尽管我认为在这种情况下可能有问题的唯一另一件事是使用我的相机mOrientation矩阵来计算外观、向上和右方向矢量,通过在 +x、+y 上转换每个矢量, 和 -z 基础,分别。因此,作为示例,要计算我的外观向量,我会这样做:mOrientation * vec4(0.0f, 0.0f, -1.0f, 1.0f),然后将其转换为vec3. 我在这里所指的上下文涉及如何将这些基向量与剔除截锥体结合使用。

0 投票
0 回答
737 浏览

c++ - 为什么我的截锥体剔除不剔除某些角度?

我的截锥体剔除实现无法正常工作;发生的情况是当我将相机向左旋转而不是向右旋转时它会剔除。如果我向后移动相机,它也会“剔除”,尽管对象消失且未渲染的距离对此非常短 -6.0f使用对象的中心(球体)和相机的位置时的单位计算距离。向上或向下运动/旋转并没有真正做任何事情。

我的投影远平面很高:500.0f,我的近平面是0.1f。当然,降低/升高远平面似乎并没有真正影响剔除。


代码

这是平面计算代码:

简而言之,首先计算远剪辑和近剪辑平面中心,然后计算平截头体两侧的四个角,以允许在planes数组中设置点,如下所示。该planes数组用于指代平截头体的 6 个面。

M_ComputePlane计算平面的法线和到原点的距离d

以下是执行的交叉测试,每个测试都经过测试并且基本上产生相同的结果:

0 投票
1 回答
393 浏览

javascript - 浏览器(chrome/firefox/safari)会剔除不可见的 svg 形状吗?

我们目前有一个大约 10000 个形状的屏幕。我们允许用户平移和缩放以进行探索。我想到了一些优化以在中期继续使用 svg:

  1. 剔除不在屏幕上的形状(仅将我们视口中的对象写入 DOM)
  2. 缩小时减少边缘

这两种策略齐头并进;但是,我想知道屏幕上尚未出现的形状是否已经被大多数浏览器供应商剔除而不是“绘制”。如果不是,那么在场景中维护对象的四叉树并渲染与我们的视口相交的当前树集可能更好吗?

0 投票
1 回答
965 浏览

3d - DirectX 如何确定缠绕顺序?

DirectX 如何确定多边形缠绕顺序?我对背面剔除特别好奇。通过研究,我看到它建议 DX 计算表面法线并获取该法线和相机矢量的点积,如果大于 0 则剔除。

首先,这是 DirectX 实际采用的技术吗?其次,如果是这种情况,考虑到每个表面都有两条法线——一个与另一个相对——DirectX 如何知道使用哪个法线?

0 投票
1 回答
1104 浏览

geometry - Directx 11 球体

我正在寻找一种使用directx 11显示大量球体的有效方法。球体由(x,y,z,r)空间(x,y,z)坐标和r半径定义。我只想显示可以看到的球体,这意味着不会绘制不在视野中的球体和太小而无法看到的球体。但是,如果一组小于一个像素的球体至少和一个像素一样大,那么我想显示最主要的颜色。球体只有一种颜色和不同级别的透明度。任何帮助将不胜感激,不完整的答案是可以接受的。

0 投票
1 回答
966 浏览

opengl - 使用 VBO 进行截锥剔除

我正计划编写一个将使用 VBO 进行渲染的 3D 游戏。例如,假设地形是一组瓦片,它们的顶点都在同一个 VBO 中。玩家应该能够滚动瓷砖,并且在任何时候都只能看到其中的一部分。

我想对这些瓷砖执行截锥剔除。我已经找到了一些关于截锥体剔除的数学部分的资料,但我不确定我将如何使用 VBO 来实现这一点——人们是在顶点着色器中以某种方式做到这一点,还是他们只是调用渲染函数来绘制VBO 的一个子集。

0 投票
0 回答
306 浏览

c++ - OpenGL 立方体面错误显示 [SFML 2.1]

我对 OpenGL 有疑问:我的立方体的面没有正确绘制。我试图禁用面部剔除,但它并没有改变任何事情。顺便说一句,我使用 sfml 2.1。我也试图改变我的立方体的索引顺序,但它只会变得更糟。让我给你看图片:

这是使用我的第一组索引的图片:

这是使用我的第二组索引的图片:

这是我的索引集: