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

directx - 如何转换边界框以进行视锥体剔除?

我有一个场景图,其中的节点包含变换和边界框,以及一个视图平截头体,我从 viewProjection 矩阵构建每个帧。但是,框在框的局部空间中有 4 个顶点的坐标。什么必须我将它们转换为,将它们放入与视锥相同的空间,这样我就可以检查与视锥的交叉点?我尝试将它们带入世界空间,但这很奇怪,因为我有 50 个世界矩阵(我使用实例化,每个实例都有自己的世界/变换矩阵)

0 投票
1 回答
1350 浏览

c++ - OpenGL 背面剔除导致奇怪的结果

我正在尝试创建一个简单的单元格着色器效果,它涉及背面和正面剔除。但到目前为止,我的剔除结果相当奇怪。

设置 OpenGL 源代码:

渲染源代码:

这就是我得到的:

在此处输入图像描述

出于某种原因,它只绘制了立方体的右侧。诡异的。我改变了 glCullFace(GL_BACK); 到 glCullFace(GL_FRONT); 在我的渲染功能中。我懂了:

在此处输入图像描述

现在它正在绘制每一面?似乎认为立方体的右侧是背面和正面的,而立方体的其余部分是背面的。当我禁用剔除时,我也会得到与上图相同的结果。

我能想到的任何其他相关信息是我正在使用 SDL,并且我确信这不是显卡问题,因为我已经在两台不同的计算机上运行了它,每台都产生相同的结果。

我刚开始学习如何为基元设置法线,所以这很可能是一个很大的 n00b 错误,或者是一些愚蠢的错误。如果我每次犯下最轻率的明显错误并且一直坚持几个小时都能得到一分钱,我就会成为百万富翁。

所以,简而言之,我做错了什么,以及如何让正确的面以正确的方式剔除或不剔除?

0 投票
1 回答
170 浏览

android - Android OpenGL ES 渲染 compex 对象不正确

我正在尝试编写绘制复杂非凸对象的程序。但我有问题 - 有些面孔似乎是透明的。我通过添加部分解决了这个问题 GLES20.glEnable(GLES20.GL_CULL_FACE);

但是在那之后我发现如果有两个面的法线方向相同并且一个放在另一个后面,它就不起作用。在这种情况下,Open GL 渲染不正确。我也尝试添加 GLES20.glEnable(GLES20.GL_DEPTH_TEST)

但我没有达到目的。而且,一半的物体消失了。你能解释一下,我哪里错了吗?

PS 为了获得对象顶点,我使用了 Blender(我将其数据导出到 obj 文件中)。我还检查了这些数据 - 顶点顺序正确(CCW)。

0 投票
1 回答
172 浏览

vector - 向量说明

我一直在关注这篇关于平截头体剔除的文章,我需要一些帮助来理解它背后的向量数学。更具体地说,他所说的“向上”和“正确”的向量是什么?他们持有什么价值观?很抱歉这个简短而令人兴奋的问题,但我真的坚持这一点。任何帮助表示赞赏!谢谢

0 投票
2 回答
399 浏览

javafx-2 - JavaFX 中的截锥体剔除

我希望在我的 JavaFX 应用程序中实现一些 Frustum Culling,因为场景外可能有大量节点,但有一些鼠标事件(例如拖动)可能会将它们带回场景。JavaFX 框架中是否已经有一些方法,或者我必须自己实现它。我已经尝试实现一种裁剪方法,该方法可以删除场景之外的节点,但是在鼠标事件之后很难更新场景。

任何帮助将不胜感激谢谢

0 投票
3 回答
4380 浏览

opengl - 什么是openGL中的顺时针面

在背面剔除中,您可以使用面法线来查看面是否指向您的相机,如果三角形是顺时针绘制还是逆时针绘制,您可以做一些技巧。

我对顺时针方向的这种技术感到困惑。似乎使用这种方法,发送到显卡的顶点数据的顺序决定了它是面向还是远离相机。我不明白这有什么意义,因为相机可以朝任何方向看,就好像顶点数据必须根据相机位置而改变,而这显然不是在 CPU 上完成的。

我怎么能理解这个?

0 投票
1 回答
803 浏览

opengl - Frustum Culling 的“雷达方法”:第一次简单测试失败?

尝试至少让Lighthouse3D 雷达截锥体剔除教程的非常简单 的第 1 部分工作......并且我什至无法在我的渲染器中使该部分工作,这让我感到非常困惑。

所以第一步是:你测试一个点是在近平面前面还是在远平面后面,如果是这样,就提前剔除。(如果没有,您将执行进一步的测试,但我只停留在第一部分。)

我使用 2x2 立方体的世界空间中心 (x1y2z3) 并有一个可以自由移动和旋转的相机。我所有的向量和矩阵的东西都必须相当坚固,否则渲染器工作得很好。所以这是我对第一部分的看法(在 Go 中),简单的“Z vs near-or-far”测试:

现在为什么我要反转 ref 的 Z?因为在教程中他们写道:“请注意,图中的引用不是右手系统(如在 OpenGL 中),因为 Z 的方向已反转以使教程更直观”——嗯,在 GL 教程中当然,这会产生相反的效果......

好吧,如果像上面那样反转 Z,它会在大约 50% 的时间里剔除更多;如果我不这样做,那么它大约有 98% 的时间会“过度剔除”..

我错过了什么?

0 投票
0 回答
411 浏览

wpf - 替换 WPF 渲染管道

WPF 在渲染期间似乎没有传达可见性信息,因此它没有剔除,因此性能可能很糟糕。所以我对绕过 WPF 的正常渲染管道以用更高效的渲染管道替换它的想法很感兴趣。

例如,给定一个包含控件网格的滚动查看器,我想预先计算网格中控件的位置,以便在给定滚动查看器中的可见区域的情况下仅呈现潜在的可见控件。因此,我将滚动查看器的渲染器替换为传递该可见性信息的渲染器,然后将网格的渲染器替换为使用该可见性信息来剔除完全位于可见区域之外的控件的渲染器。

这可能吗?如果可以,如何实现?

0 投票
0 回答
97 浏览

algorithm - 使用线程池进行截锥剔除?

我正在开发一款类似我的世界的游戏,我想知道一种在玩家行走时生成块的有效方法。特别是,我想画出玩家在他身后看到的块。

我目前正计划创建一个线程池,其中每个区域由不同的线程异步生成。有没有办法使用截锥体剔除等算法有效地对任务进行排序?

0 投票
1 回答
1069 浏览

android - 在 OpenGL ES 中,如何将绘图“剪辑”到矩形?

我正在开发一个使用单个 OpenGL ES 实例的 Android 应用程序。在某些情况下,我会在其他所有内容之上绘制一个自定义(矩形)对话框,其中包含滚动文本、线条等。对话框不会占据整个屏幕,并且我绘制的内容大于对话框,其中在对话框中滚动,就像一个选框。

当然,由于我最后绘制了这个对话框(在所有其他视图的顶部),所以我绘制的所有顶点都将是可见的,但我想告诉 OpenGL不要在对话框矩形之外绘制任何渲染命令。像这样...

剔除为矩形

我的大部分绘图都是glDrawArrays(...)使用FloatBuffer数组完成的。我想要的是一种向 OpenGL 指定我希望任何绘图在指定区域之外不可见的方法。

我对剔除了解不多,但这似乎与我正在寻找的东西非常相关。但是,剔除似乎只是为了跳过在 3D 中从相机视图中“看到”的三角形的绘制,而我想“跳过”在视口内任意矩形之外的任何三角形的绘制.