问题标签 [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.
opengl - opengl:避免在透视模式下剪辑?
看起来解决方案是即时更改投影矩阵?让我做一些研究,看看如何正确地做到这一点。
我的场景是:===> 说,现在,我在 windows7 下的窗口中创建了一个启用透视模式的 3D 框。从用户的角度来看,当用户移动(旋转/平移)这个盒子时,当盒子离开窗口时,它应该被剪裁/(部分隐藏),这是正确的。但是当盒子在窗口内移动时,盒子应该总是完全显示(而不是剪裁!),对吧?但是我的问题是,有时候,当用户在窗口内移动盒子时,他会看到这个盒子的某些部分被剪掉了(例如,这个盒子的一个顶点被剪掉了)。用户可以移动这个盒子的数量没有限制。
我的理解是:===> 当用户移动盒子时,这个盒子就没有截锥体,这就是它被剪掉的原因。在这种情况下,我的代码应该即时调整平截头体(然后,更改投影矩阵)或动态调整相机(也许,也调整近远平面)或做其他事情?
我的问题是:===> 避免这种剪辑的流行技术是什么?并确保用户感觉他们正在平稳地移动盒子,没有任何“混蛋”(例如,当用户移动盒子时,盒子的位置突然跳到另一个位置(因为我们的截头体突然发生了很大变化))。我认为这是一个非常经典的问题,应该有一个完美的解决方案。任何代码/参考都表示赞赏!
我附上了一张图片来显示问题:
performance - 剔除和脚本
我不是编程专家,我只是想到了这个,所以我想出了什么更好的地方来问它。如果一个游戏对象(在此处使用 Unity)被剔除,但它上面有一个脚本被设置为创建粒子效果和实例化对象......并且那些粒子效果和对象也被剔除(目前)它是否仍然有一个由于对象被剔除,性能成本?
我正在考虑的实际实例是带有大地图的在线游戏。如果玩家 B 在玩家 A 的相机剔除距离之外,并且玩家 B 正在做一些创建粒子效果和对象的事情,玩家 A 的本地机器会知道玩家 B 正在做这些事情,但它实际上不会在绘制(渲染)他们……那么玩家 A 的机器仍然投入大量工作吗?
c# - OpenTK 不正确地剔除对象
我最近使用 OpenTK 使用 C# 和 OpenGL 制作了一个应用程序。为了提高性能,我集成了一个截锥体剔除系统,但由于某些原因,对象未被正确剔除。我的意思是,它不是很好地显示所有可见对象,而是剔除随机对象,当我旋转相机时,一些对象会出现和消失。我知道这很正常,但不是在我应该看到他们的时候。实际的截锥体剔除代码是我在其他地方使用的工作 C++/DirectXMath 代码的 C# 端口。
以下是我创建六个截头平面的方法:
我检查是否应该在这里剔除一个球体:
我在其他一些帖子上看到人们手动将视图和投影矩阵相乘,但我不确定这是问题的原因。我做错了什么?谢谢
java - 遮挡着色器将整个场景变为黑色
我正在尝试剔除每张脸,如果它是正常的,角度为:90 < x < 270(度),矢量从 cameraPosition 到 vertexPosition。
我看到的一切都是屏幕变黑。我刚开始使用 GLSL,所以我不知道可能是什么原因......或者如何调试。
顶点着色器:
片段着色器:
c++ - Back Face Culling for Line Loop
I am using z-buffer to render my 3D triangular mesh. However, when I rendered the model as a wireframe mesh, I also saw the triangle faces which should have been hidden by the front face. So, I used the back face culling as follows:
The drawWireFrame function is as follows:
However, I am still getting the same result I got before adding back face culling. Could you please help me identify what am I missing here.
Thank you.
opengl-3 - 使用着色器时的高效截锥剔除
我想知道使用可编程管道进行截锥体剔除的最有效方法是什么。我的意思是,如果我理解正确,按照这里描述的方法:几何方法(顺便说一下,那里描述的唯一方法对我有用),像 glGetFloatv(GL_MODELVIEW_MATRIX, ...) 这样的函数不再有效,因为最终顶点位置在着色器阶段计算。对于渲染前必须检查的每个边界框转换,我是否必须在客户端计算平截头体平面?
谢谢。
sfml - 截锥体剔除在调试中降低了帧率,但在发布时提高了它
我正在用 SFML 制作一个基于瓦片的游戏,并决定实现一个简单的边界框平截头体剔除,只绘制相机视口中的瓦片。结果是成功的,因为它使我的帧率增加了两倍!但是,有一个缓存。在调试中运行游戏时,帧速率反而会因实施的截锥体剔除而降低。它在调试时从 90 fps 变为 30 fps,而在发布时它从 100 fps 变为大约 350 fps。
剔除只是检查每个图块矩形,它是否与视口的矩形相交。如果是,则绘制。游戏为分屏渲染了几个视图,代码如下所示:
……
……
当我删除矩形的相交调用时,帧速率恢复到 90 fps。我很困惑为什么会这样。
graphics - 球体/平截头体重叠测试的选择
我正在尝试理解一些可能比我现在想的要容易得多的东西,所以希望有人能够帮助我理解我在下面描述的内容。
我知道如果球体完全位于 3D 中的六个平截头体平面中的至少一个之后(左、右、下、上、近远),则球体在视锥体之外。下例中以 c2 为中心的圆也是如此,它完全在左平面之外。重叠测试的简单方法是将球体的中心坐标插入平面方程,得到中心到平面的距离,然后将其与球体的半径进行比较。
但是,在中心为 c1 的球体上使用这种方法会给我们一个误报,因为测试会告诉我们球体在右侧和远平面内(如果从上方看)。然后,解决方案是通过确定球体中心到最接近它的视锥角的距离来使用更精确的重叠测试。如果该距离大于半径,则球体在截锥体之外等。
我不明白的是,如果我们使用第二种方法,在一个像中心 c3 的球体上看角而不是平面,会发生什么。测试是否会告诉我们距球体中心的距离减去半径大于 0 并因此超出观察体积?
因此,如果给定一组正交视图体积规则,即 0 ≤ x ≤ 20、-5 ≤ 15、-5 ≤ z ≤ 18 和 x,y,z 坐标 + 球体半径,并告诉确定球体是在里面还是外面。我如何选择使用什么方法才能真正获得正确的答案?
directx-11 - 使用计算着色器的 DirectX11 分层剔除
我对调度计算着色器任务以进行分层剔除的最佳方式感兴趣。这适用于任何类型的 BVH,例如 Quad-tree、Oct-tree 或 Kd-tree,它们存储节点的层次结构,其中子节点在空间上包含在其父节点中。
我对如何做到这一点有一些想法,但我对其中任何一个都不是特别满意:
1)为节点总数生成一些作业,然后在其父节点最终不可见的节点上提前返回。但是,这并不能保证子节点在父节点计算其可见性之前不会执行,我不确定如何正确同步。
2) 仅调度根节点,然后如果可见,将其子节点添加到 UAV。只要 UAV 中仍有节点,该着色器就会重复(并扩展到更多线程)。不过,我不确定如何实际执行此操作,或者即使使用 DX11 计算可以做到这一点。
3) 为每一层节点调用调度,该层中的最大节点数(在八叉树中,这将是 1、8、64、512、4096 等)。这似乎很浪费,但它允许可见性通信,以便各个节点可以根据其父节点的可见性(或者如果它们实际上不存在)提前退出。
4) 完全放弃分层剔除,只为每个单独的对象分派一个作业。这对我多年来的剔除似乎有悖常理,但它肯定是最直接和可并行的。
我是否正确地考虑了这一点?任何有关执行此操作的好方法的见解都会非常有帮助!